我有一個DataFrame對象stocks
充滿股票回報。我有另一個充滿行業回報的DataFrame對象industries
。我想找到每個股票與每個行業的關聯。如何計算DataFrame中所有列與另一個DataFrame中所有列之間的相關性?
昂貴的方式做,這是合併這兩個數據框的對象,計算相關,然後扔掉了所有的股票,以股票和行業而相關性。有沒有更有效的方法來做到這一點?
謝謝!
我有一個DataFrame對象stocks
充滿股票回報。我有另一個充滿行業回報的DataFrame對象industries
。我想找到每個股票與每個行業的關聯。如何計算DataFrame中所有列與另一個DataFrame中所有列之間的相關性?
昂貴的方式做,這是合併這兩個數據框的對象,計算相關,然後扔掉了所有的股票,以股票和行業而相關性。有沒有更有效的方法來做到這一點?
謝謝!
(編輯補充:不是這個答案的請出這是後來添加的,但顯然是更好@ YT的答案。)
你可以用numpy.corrcoef()
去基本上是一樣的corr
的大熊貓,但是語法可能更適合你想要的東西。
import numpy as np
np.random.seed(123)
df1=pd.DataFrame({'s1':np.random.randn(10000), 's2':np.random.randn(10000) })
df2=pd.DataFrame({'i1':np.random.randn(10000), 'i2':np.random.randn(10000) })
for s in ['s1','s2']:
for i in ['i1','i2']:
print('corrcoef',s,i,np.corrcoef(df1[s],df2[i])[0,1])
,打印:
corrcoef s1 i1 -0.00416977553597
corrcoef s1 i2 -0.0096393047035
corrcoef s2 i1 -0.026278689352
corrcoef s2 i2 -0.00402030582064
另外,您可以將結果加載到適當的標籤,一個數據幀:
cc = pd.DataFrame()
for s in ['s1','s2']:
for i in ['i1','i2']:
cc = cc.append(pd.DataFrame(
{ 'corrcoef':np.corrcoef(df1[s],df2[i])[0,1] }, index=[s+'_'+i]))
,看起來像這樣:
corrcoef
s1_i1 -0.004170
s1_i2 -0.009639
s2_i1 -0.026279
s2_i2 -0.004020
這裏的一個稍微簡單的回答呃比JohnE的本地使用熊貓而不是使用numpy.corrcoef。作爲一個額外的好處,你不必從一個愚蠢的2x2相關矩陣中檢索相關值,因爲熊貓的系列到系列相關函數只是返回一個數字,而不是矩陣。
In [133]: for s in ['s1','s2']:
...: for i in ['i1','i2']:
...: print df1[s].corr(df2[i])
而這裏的一班輪使用的列apply
,並避免嵌套的for循環。主要優點是apply
在DataFrame中生成結果。
df1.apply(lambda s: df2.corrwith(s))
這很容易就是最好的答案,值得擁有更多的選票。您可能想要考慮顯示可能使其更明顯的輸出,這是最佳答案。 – JohnE 2017-07-24 01:39:42
我的答案是當前選中的,但是yt的答案是最簡單和最快的答案。如果您同意,請選擇一個作爲最佳答案。 – JohnE 2017-07-24 01:52:36