我想基于每个组中每个金额的总和创建一个名为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”和上面列出的值错误。我在做什么错了?
答案 0 :(得分:0)
它表示cumsum
返回多于1列。换句话说,df.groupby('company').cumsum()
正在对cumsum
对象调用DataFrameGroupby
,因此它返回一个数据帧。如果返回的数据帧只有1列,则分配仍然有效。但是,如果返回的数据框有2列或更多列,则将失败,如上面的错误所示。我怀疑您的第一次运行返回了1列数据帧,所以它起作用了。但是,第一次运行创建了另一列。在下一次运行时,它将返回n列数据帧,因此分配失败。
尝试使用此方法来纠正错误:
df['total_amount'] = df.groupby('company')['amount'].cumsum()