微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas groupby适用于多个列

我试图将相同的函数应用于groupby对象的多个列,例如:

In [51]: df
Out[51]: 
           a         b group
0   0.738628  0.242605  grp1
1   0.411315  0.340703  grp1
2   0.328785  0.780767  grp1
3   0.059992  0.853132  grp1
4   0.041380  0.368674  grp1
5   0.181592  0.632006  grp1
6   0.427660  0.292086  grp1
7   0.582361  0.239835  grp1
8   0.158401  0.328503  grp2
9   0.430513  0.540628  grp2
10  0.436652  0.085609  grp2
11  0.164037  0.381844  grp2
12  0.560781  0.098178  grp2

In [52]: df.groupby('group')['a'].apply(pd.rolling_mean, 2, min_periods = 2)
Out[52]: 
0          NaN
1     0.574971
2     0.370050
3     0.194389
4     0.050686
5     0.111486
6     0.304626
7     0.505011
8          NaN
9     0.294457
10    0.433582
11    0.300345
12    0.362409
dtype: float64

In [53]: 

但是,如果我尝试df.groupby(‘group’)[‘a’,’b’].apply(pd.rolling_mean,2,min_periods = 2)或df.groupby(‘group’)[[‘a’, ‘b’]].apply(pd.rolling_mean,2,min_periods = 2),两者都会给我ValueError:无法将字符串转换为float:grp1.
函数同时应用于多个列的正确方法是什么?

解决方法:

我认为您正在寻找transform – 它将功能应用于每个组.

>>> df.groupby('group').transform(pd.rolling_mean, 2, min_periods=2)
           a         b
0        NaN       NaN
1   0.574971  0.291654
2   0.370050  0.560735
3   0.194388  0.816950
4   0.050686  0.610903
5   0.111486  0.500340
6   0.304626  0.462046
7   0.505010  0.265961
8        NaN       NaN
9   0.294457  0.434566
10  0.433582  0.313119
11  0.300344  0.233727
12  0.362409  0.240011

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐