我正在使用以下代码对两个数据框进行关联。基本上,从一个数据框(a)中选择一组列和另一个数据框(b)中的一列。它完美地运行,但是我需要使用spearman选项来完成它。我会感激任何输入或想法。谢谢...
a.ix[:,800000:800010].corrwith(b.ix[:,0])
我正在使用以下代码对两个数据框进行关联。基本上,从一个数据框(a)中选择一组列和另一个数据框(b)中的一列。它完美地运行,但是我需要使用spearman选项来完成它。我会感激任何输入或想法。谢谢...
a.ix[:,800000:800010].corrwith(b.ix[:,0])
apply
中使用 pandas.Series.corr,其中您将每列传递到一个函数中,这里是匿名的 lambda
,并将每个列与 b
列配对:
随机数据 (已种子化以重现)
import pandas as pd
import numpy as np
np.random.seed(50)
a = pd.DataFrame({'A':np.random.randn(50),
'B':np.random.randn(50),
'C':np.random.randn(50),
'D':np.random.randn(50),
'E':np.random.randn(50)})
b = pd.DataFrame({'test':np.random.randn(10)})
重现Pearson相关性
pear_result1 = a.ix[:,0:5].corrwith(b.ix[:,0])
print(pear_result1)
# A -0.073506
# B -0.098045
# C 0.166293
# D 0.123491
# E 0.348576
# dtype: float64
pear_result2 = a.apply(lambda col: col.corr(b.ix[:,0], method='pearson'), axis=0)
print(pear_result2)
# A -0.073506
# B -0.098045
# C 0.166293
# D 0.123491
# E 0.348576
# dtype: float64
print(pear_result1 == pear_result2)
# A True
# B True
# C True
# D True
# E True
# dtype: bool
斯皮尔曼相关性
spr_result = a.apply(lambda col: col.corr(b.ix[:,0], method='spearman'), axis=0)
print(spr_result)
# A -0.018182
# B -0.103030
# C 0.321212
# D -0.151515
# E 0.321212
# dtype: float64
斯皮尔曼相关系数和p值
from scipy.stats import spearmanr, pearsonr
# SERIES OF TUPLES (<scipy.stats.stats.SpearmanrResult> class)
spr_all_result = a.apply(lambda col: spearmanr(col, b.ix[:,0]), axis=0)
# SERIES OF FLOATS
spr_corr = a.apply(lambda col: spearmanr(col, b.ix[:,0])[0], axis=0)
spr_pvalues = a.apply(lambda col: spearmanr(col, b.ix[:,0])[1], axis=0)