【问题标题】:Issues with groupby and aggregate in pandas熊猫中的 groupby 和聚合问题
【发布时间】:2021-03-21 05:29:14
【问题描述】:

我不确定我在这里做错了什么。这是我的代码:

df['PV_SUM'] = df.groupby('DOCKET').agg({'PV':sum})

没有返回任何结果,只是一个空系列。

这是我假设的数据框:

DOCKET    PV
1a        1
1a        1 
1a        1
1b        0
1b        1
1b        1

这是我正在寻找的结果:

DOCKET    PV      PV_SUM
1a        1         3
1a        1         3
1a        1         3
1b        0         2
1b        1         2
1b        1         2

我做错了什么? DOCKET 的数据类型是对象,PV 的数据类型是浮点数。我已将 dtype 更改为 PV 为 int 但没有运气。

【问题讨论】:

    标签: python pandas aggregation


    【解决方案1】:

    改用transform

    df['PV_SUM'] = df.groupby('DOCKET').PV.transform(sum)
    

    输出:

      DOCKET  PV  PV_SUM
    0     1a   1       3
    1     1a   1       3
    2     1a   1       3
    3     1b   0       2
    4     1b   1       2
    5     1b   1       2
    

    您的代码的问题是df.groupby('DOCKET').agg({'PV':sum}) 返回一个以DOCKET 作为索引和PV 作为值列的数据框。当您尝试将其分配回 daframe 时,pandas 会查找匹配的索引,并且由于没有匹配项,它会返回 NaN

    例如,看看df.groupby('DOCKET').agg({'PV':sum})的输出:

            PV
    DOCKET    
    1a       3
    1b       2
    

    由于 pandas 匹配索引,您可以先将数据框的索引设置为“DOCKET”,然后它将按预期工作:

    result = df.groupby('DOCKET').agg({'PV':sum})
    df = df.set_index('DOCKET')
    df['PV_SUM'] = result
    

    【讨论】:

    • 谢谢!这让我发疯了。您能解释一下为什么我的解决方案不起作用吗?
    • 我已经用一些解释更新了答案。 Pandas 通常使用索引标签。让我知道是否足够清楚。最好的!
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多