[Xlwings python pandas dataframe groupby返回重复数据

问题描述 投票:2回答:1

我想将第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)
python pandas xlwings
1个回答
0
投票

事实证明,我所需要的只是.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
© www.soinside.com 2019 - 2024. All rights reserved.