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
我不确定自己做错了什么。这是我的代码:
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