2017-09-04 104 views
3

Pandas提供兩種不同的相關函數的原因是什麼?Pandas corr()vs corrwith()

DataFrame.corrwith(其他,軸= 0,降=假):2數據幀objectsCompute成對

數據幀的行或列之間的相關性 .corr(method ='pearson',min_periods = 1):計算成對 列的相關性,不包括NA /空值

(從熊貓0.20.3文檔)

回答

3

第一個計算與另一個數據幀的相關性:

2數據幀的行或列之間的對象

第二個單位計算它本身

計算列

的對相關
3

基本答案:

這裏有一個例子可能更清楚:

np.random.seed(123) 
df1=pd.DataFrame(np.random.randn(3,2), columns=list('ab')) 
df2=pd.DataFrame(np.random.randn(3,2), columns=list('ac')) 

正如@ffeast指出,使用corr比較內的數值列相同的數據幀。非數字列將被自動跳過。

df1.corr() 

      a   b 
a 1.000000 -0.840475 
b -0.840475 1.000000 

您可以corrwith比較DF1 & DF2列。需要注意的是與同名僅列進行比較:

df1.corrwith(df2) 

a 0.993085 
b   NaN 
c   NaN 

附加選項:

如果你想熊貓忽略列名,只是DF1的第一行比較的第一行DF2的,那麼你可以重新命名DF2的列匹配DF1的列是這樣的:

df1.corrwith(df2.set_axis(df1.columns, axis='columns', inplace=False)) 

a 0.993085 
b 0.969220 

注意DF1和DF2需要具有相同的列數在這種情況下。

最後,廚房水槽方法:您也可以簡單地水平連接兩個數據集,然後使用corr()。其優點是,這主要作品無論列數以及它們是如何命名的,但缺點是,你可能會得到比你想要更多的輸出或需要:

pd.concat([df1,df2],axis=1).corr() 

      a   b   a   c 
a 1.000000 -0.840475 0.993085 -0.681203 
b -0.840475 1.000000 -0.771050 0.969220 
a 0.993085 -0.771050 1.000000 -0.590545 
c -0.681203 0.969220 -0.590545 1.000000 
+1

唉唉!你最後的提示「同名」是非常有用的。這是我感到困惑的地方,因爲我不知道哪個列是相關的邏輯。 –

+0

@BaluJr。是的,我故意做了這個B/C通常人們會認爲熊貓會根據位置(包括我;-)來對齊列,但大熊貓通常會按標籤做事。 – JohnE