我想将第0列和第1列求和。我正在为'x'使用命名范围,我们将其称为x。它正在查看的数据如下:
1207 1500
1222 1500
1211 1500
1218 1500
1208 1500
1204 1500
1216 1500
1215 1500
1212 1500
1205 1500
1213 1500
1221 1500
1209 1500
1214 1500
1202 1500
1203 1500
1206 1500
1210 1500
1217 1500
1220 -10950
1219 -12675
1217 500
如果我在其他地方选择了确切的大小范围,并使用ctrl + shift + enter,则下面的代码可以正常工作。它返回完全相同的数据。
@xw.arg('x', xw.Range)
@xw.ret(pd.DataFrame, index=False, header=False)
def udf_groupby_range_x(x):
res = x.options(pd.DataFrame, index=False, header=False).value
return res
但是,当我使用以下代码时,所有数据单元格都变为1500。
@xw.arg('x', xw.Range)
@xw.ret(pd.DataFrame, index=False, header=False)
def udf_groupby_range_x(x):
res = x.options(pd.DataFrame, index=False, header=False).value
res = res.groupby(res.columns[0])[res.columns[1]].sum()
return res
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
1500 1500
我如何获得退货?
1207 1500
1222 1500
1211 1500
1218 1500
1208 1500
1204 1500
1216 1500
1215 1500
1212 1500
1205 1500
1213 1500
1221 1500
1209 1500
1214 1500
1202 1500
1203 1500
1206 1500
1210 1500
1217 2000 (was 1500)
1220 -10950
1219 -12675
1217 500 (gone)
事实证明,我所需要的只是.reset_index()。我添加了一些我已经拥有的代码,但是为了最大程度地减少混乱,现在可以了。这将采用一个包含数据的命名范围,并在数据下方保留空白单元格,对第1列求和,然后按第0列分组并删除重复项。
@xw.func
@xw.arg('x', xw.Range)
@xw.ret(pd.DataFrame, index=False, header=False, expand='table')
def udf_groupby_range_x(x):
res = x.options(pd.DataFrame, index=False, header=False).value
res = res.groupby(res.columns[0])[res.columns[1]].sum().reset_index()
res = res.dropna(axis=0, how='all')
res.fillna("", inplace=True)
return res