为啥 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的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PyMongo 3 给出 ServerSelectionTimeoutError?
为啥 PyMongo 3 给出 ServerSelectionTimeoutError?