4

次のように、同じ関数を 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。一度に複数の列に関数を適用する正しい方法は何ですか?

4

1 に答える 1

3

変換を探していると思います-各グループに関数を適用します。

>>> 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
于 2013-08-10T08:24:53.043 に答える