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