pandas 中的 groupby 和聚合问题

Issues with groupby and aggregate in pandas

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

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 但没有运气。

改用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}) returns 一个以 DOCKET 作为索引且 PV 作为值列的数据框。当您尝试将其分配回 daframe 时,pandas 查找匹配的索引,并且由于没有匹配项,它 returns 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