为什么df.cumsum()给出ValueError:传递的项目数量错误,放置位置暗示1

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

我想基于每个组中每个金额的总和创建一个名为total_amount的新列。我希望最终数据集如下所示。

公司|金额| total_amount

公司1 | 10000 | 10000

公司1 | 20000 | 30000

公司1 | 30000 | 60000

公司2 | 10000 | 10000

公司2 | 20000 | 30000

公司3 | 10000 | 10000

公司4 | 10000 | 10000

公司4 | 20000 | 20000

公司5 | 10000 | 10000

公司5 | 20000 | 30000

公司5 | 30000 | 60000

公司5 | 40000 | 100000


我运行了此代码

 df['total_amount'] = df.groupby('company').cumsum()

并且它短暂地起作用,但是当我尝试更改其位置以使我的代码更具可读性时,它开始给我KeyError“ total_amount”和上面列出的值错误。我在做什么错?

python pandas cumsum
1个回答
0
投票

它表示cumsum返回2列以上。换句话说,df.groupby('company').cumsum()正在调用cumsum对象上的DataFrameGroupby,因此它返回一个数据帧。如果返回的数据帧只有1列,则分配仍然有效。但是,如果返回的数据框有2列或更多列,则将失败,如上面的错误所示。我怀疑您的第一次运行返回了1列数据帧,所以它起作用了。但是,第一次运行创建了另一列。在下一次运行时,它返回n列数据帧,因此分配失败。

尝试使用此方法来纠正您的错误:

df['total_amount'] = df.groupby('company')['amount'].cumsum()
© www.soinside.com 2019 - 2024. All rights reserved.