pandas groupby适用于多个列

时间:2013-08-10 05:38:49

标签: python pandas

我正在尝试将同一个函数应用于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: could not convert string to float: grp1。 将函数同时应用于多个列的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找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
相关问题