为什么df.cumsum()给出ValueError:传递的项目数错误,放置意味着1

时间:2019-10-19 03:31:22

标签: python pandas cumsum

我想基于每个组中每个金额的总和创建一个名为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”和上面列出的值错误。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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

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

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