2015-12-17 33 views
2

這裏是我的輸入數據。在Pandas中,如何在Groupby對象上使用Group mean應用定製功能

df1= pd.DataFrame(np.random.randn(10,3), columns= list("ABC")) 

     A   B   C 
0 0.557303 1.657976 -0.091638 
1 -0.769201 1.305553 -0.248403 
2 1.251513 -0.634947 0.100130 
3 -1.030045 -0.268972 1.328666 
4 0.665483 -0.133410 0.151235 
5 0.703294 -0.525490 0.109413 
6 0.549441 0.002626 -0.005841 
7 0.454866 1.094490 -1.946760 
8 -0.152995 -0.736689 -0.367252 
9 -0.632906 1.066869 0.303271 

我想根據列A的值創建組。所以我首先切片A.並定義一個函數。然後我在Groupby Obj上使用apply方法。我期待新的列將超過A的組平均值B和C之間的差異

b=np.linspace(-1, 1,5) 

def tmpF(x): 
    x['newCol']= (x['B']-x['C'])/df1['A'].mean() 
return x 

df1.groupby(np.digitize(df1['A'],b)).apply(tmpF) 

不過,我只使用了整列A的平均值我知道DF1 [「A」 ] .mean()是錯誤的,但我不知道如何訪問組的意思。 如何解決?

+0

我試了一下。它失敗的錯誤「ValueError:緩衝區的維數錯誤(預期1,得到2)」。 –

+0

謝謝。有用 !!!它只是因爲我的一個愚蠢的錯字而失敗。我用np.digitize(df1,b)代替df1 ['A']。它會導致維度問題。 –

+0

是的,你解決了它。答案是非常有幫助的。 –

回答

1

可以在功能tmpF改變df1['A']x['A']

b=np.linspace(-1, 1,5) 

def tmpF(x): 
    x['newCol']= (x['B']-x['C'])/x['A'].mean() 
return x 

df1.groupby(np.digitize(df1['A'],b)).apply(tmpF) 
相關問題