我试图将相同的函数应用于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] 举报,一经查实,本站将立刻删除。