簡體   English   中英

熊貓系列與整個DataFrame之間的關聯

[英]Correlation between a pandas Series and a whole DataFrame

我有一系列值,並且正在計算給定表的每一行的皮爾遜相關性。

我該怎么做?

例:

import pandas as pd

v = [-1, 5, 0, 0, 10, 0, -7]
v1 = [1, 0, 0, 0, 0, 0, 0]
v2 = [0, 1, 0, 0, 1, 0, 0]
v3 = [1, 1, 0, 0, 0, 0, 1]

s = pd.Series(v)
df = pd.DataFrame([v1, v2, v3], columns=['a', 'b', 'c', 'd', 'e', 'f', 'g'])

# Here I expect ot do df.corrwith(s) - but won't work

使用Series.corr()計算,預期輸出為

-0.1666666666666666  # correlation with the first row
0.83914639167827343  # correlation with the second row
-0.35355339059327379 # correlation with the third row

你需要相同indexSeries作為columnsDataFrame進行對齊SeriesDataFrame ,並添加axis=1corrwith進行行的相關性:

s1 = pd.Series(s.values, index=df.columns)
print (s1)
a    -1
b     5
c     0
d     0
e    10
f     0
g    -7
dtype: int64

print (df.corrwith(s1, axis=1))
0   -0.166667
1    0.839146
2   -0.353553
dtype: float64

print (df.corrwith(pd.Series(v, index=df.columns), axis=1))
0   -0.166667
1    0.839146
2   -0.353553
dtype: float64

編輯:

您可以指定列並使用子集:

cols = ['a','b','e']

print (df[cols])
   a  b  e
0  1  0  0
1  0  1  1
2  1  1  0

print (df[cols].corrwith(pd.Series(v, index=df.columns), axis=1))
0   -0.891042
1    0.891042
2   -0.838628
dtype: float64

這可能對那些關心性能的人有用。 與熊貓corrwith相比,我發現這種運行時間減少了一半。

您的數據:

import pandas as pd
v = [-1, 5, 0, 0, 10, 0, -7]
v1 = [1, 0, 0, 0, 0, 0, 0]
v2 = [0, 1, 0, 0, 1, 0, 0]
v3 = [1, 1, 0, 0, 0, 0, 1]    
df = pd.DataFrame([v1, v2, v3], columns=['a', 'b', 'c', 'd', 'e', 'f', 'g'])

解決方案(請注意,v不會轉換為序列):

from scipy.stats.stats import pearsonr
s_corrs = df.apply(lambda x: pearsonr(x.values, v)[0], axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM