【问题标题】: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" 和上面列出的值错误。我做错了什么?

【问题讨论】:

    标签: python pandas cumsum


    【解决方案1】:

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

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

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

    【讨论】:

    • 你是对的,我不知道我可以用括号指定另一列。感谢您的帮助!
    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多