2016-12-28 37 views
3
import pandas as pd 
import numpy as np 

df = pd.DataFrame({'group': ['a'] * 5 + ['b'] * 5, 'x1': np.random.normal(0, 1, 10), 'x2': np.random.normal(0, 1, 10), 'y': np.random.normal(0, 1, 10)}) 

df 
Out[4]: 
    group  x1  x2   y 
0  a -0.468746 1.254817 -1.629483 
1  a -1.849347 -2.776032 1.413563 
2  a 1.186306 0.766866 0.163395 
3  a -0.314397 -0.531984 0.473665 
4  a 0.278961 0.510429 1.484343 
5  b 2.240489 0.856263 0.369464 
6  b 2.029284 1.020894 -0.042139 
7  b 1.571930 -0.415627 0.865577 
8  b 0.609133 1.370543 0.450230 
9  b -1.820421 -0.211467 0.704480 

我想計算y和一些特定的(不是全部)按組相同數據幀的列來產生輸出數據框,看起來像之間的相關性:熊貓:如何計算一列與多個其他列之間的相關性?

Out[5]: 
     x1  x2 
a -0.168390 -0.622155 
b -0.467561 -0.771757 

我曾試圖用一個-liner像:

df.groupby('group')[['x1', 'x2']].apply(...some function here that takes y as argument...) 

不過,我有一個關於如何寫函數,這樣它會通過指定列迭代(x1x2)困難以及如何特異性y y作爲固定列。

有誰知道可以實現這一點的優雅單線?

回答

4

使用groupby + corrwith

df.groupby('group').apply(lambda d: d.filter(like='x').corrwith(d.y)) 

      x1  x2 
group      
a  0.127141 0.434080 
b  -0.892755 0.524215 
+0

感謝。我不知道'corrwith'函數 – ezbentley

+0

np,很高興我可以幫助 – piRSquared

相關問題