如何在pandas groupby中聚合多个列
我创建了一个名为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
。