为啥 df.cumsum() 给出 ValueError: Wrong number of items passed, placement 意味着 1

Posted

技术标签:

【中文标题】为啥 df.cumsum() 给出 ValueError: Wrong number of items passed, placement 意味着 1【英文标题】:Why is df.cumsum() giving ValueError: Wrong number of items passed, placement implies 1为什么 df.cumsum() 给出 ValueError: Wrong number of items passed, placement 意味着 1 【发布时间】:2020-02-16 00:11:01 【问题描述】:

我想根据每个组中每个金额的总和创建一个名为 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】:

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

试试这个来修复你的错误:

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

【讨论】:

你是对的,我不知道我可以用括号指定另一列。感谢您的帮助!

以上是关于为啥 df.cumsum() 给出 ValueError: Wrong number of items passed, placement 意味着 1的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个javascript代码给出错误[重复]

为啥 PyMongo 3 给出 ServerSelectionTimeoutError?

为啥 PyMongo 3 给出 ServerSelectionTimeoutError?

为啥哈希函数会给出分段错误?

为啥 connect() 会给出 EADDRNOTAVAIL?

为啥 Netezza 序列下一个值给出随机值?