如何在pandas groupby中聚合多个列

8 投票
1 回答
16473 浏览
提问于 2025-04-17 21:21

我创建了一个名为mn的pandas数据框,使用了以下输入:

keyA     state n1    n2     d1  d2
key1     CA   100   1000    1   2
key2     FL   200   2000    2   4
key1     CA   300   3000    3   6
key1     AL   400   4000    4   8
key2     FL   500   5000    5   2
key1     NY   600   6000    6   4
key2     CA   700   7000    7   6

然后我创建了一个求和对象,具体如下:

s = mn.groupby(['keyA','state'], as_index=False).sum()

我该如何遍历这个求和对象s,以便得到以下输出:

结果中的v1列是通过s['n1']/s['d1']计算得出的。

结果中的v2列是通过s['n2']/s['d2']计算得出的。

keyA state  v1  v2
'key1','AL',100,500
'key1','CA',100,500
'key1','NY',100,1500
'key2','CA',100,1166
'key2','FL',100,1166

1 个回答

11

基本上就像你写伪代码那样写就行。

In [14]: s = mn.groupby(['keyA','state'], as_index=False).sum()

In [15]: s['v1'] = s['n1'] / s['d1']

In [16]: s['v2'] = s['n2'] / s['d2']

In [17]: s[['keyA', 'state', 'v1', 'v2']]
Out[17]: 
   keyA state   v1           v2
0  key1    AL  100   500.000000
1  key1    CA  100   500.000000
2  key1    NY  100  1500.000000
3  key2    CA  100  1166.666667
4  key2    FL  100  1166.666667

[5 rows x 4 columns]

顺便说一下,我觉得你示例数据里有个拼写错误。第二个 n1 的标题应该是 n2

撰写回答