3

Pandas データフレームdfに列 a,b,c,d...z があるとします。そして、私がしたいのはdf.groupby('a').apply(my_func())、列d-zの場合、列を変更し'b' & 'c'ないままにすることです。どうやってするか ?

Pandas は、 dict を渡すことで、異なる関数を異なる列に適用できることに気付きました。しかし、私は長い列リストを持っていて、パラメータを設定したり、Pandas にいくつかの列をバイパスmy_func()して残りの列に適用するように指示したりしたいだけですか? (それ以外の場合は、長い辞書を作成する必要があります)

4

1 に答える 1

4

単純な (そして一般的な) アプローチの 1 つは、関心のあるサブセットを含むデータフレームのビューを作成し (または、場合によっては、無視する列を除くすべての列を含むビュー)、そのために APPLY を使用することです。見る。

In [116]: df
Out[116]: 
     a  b         c  d        f
0  one  3  0.493808  a      bob
1  two  8  0.150585  b    alice
2  one  6  0.641816  c  michael
3  two  5  0.935653  d      joe
4  one  1  0.521159  e     kate

お気に入りの方法を使用して、必要なビューを作成します。so のように列の範囲を選択することもできますdf_view = df.ix[:,'b':'d']が、シナリオでは次のほうが役立つ場合があります。

#I want all columns except two 
cols = df.columns.tolist()    
mycols = [x for x in cols if not x in ['a','f']]
df_view = df[mycols]

そのビューに関数を適用します。(これは df ではまだ何も変更されていないことに注意してください。)

In [158]: df_view.apply(lambda x: x /2)
Out[158]: 
   b         c   d
0  1  0.246904  20
1  4  0.075293  25
2  3  0.320908  28
3  2  0.467827  28
4  0  0.260579  24

update() を使用して df を更新します

In [156]: df.update(df_view.apply(lambda x: x/2))

In [157]: df
Out[157]: 
     a  b         c   d        f
0  one  1  0.246904  20      bob
1  two  4  0.075293  25    alice
2  one  3  0.320908  28  michael
3  two  2  0.467827  28      joe
4  one  0  0.260579  24     kate
于 2012-10-28T20:51:52.187 に答える