计算Pandas中两列DataFrame中类似离散值的相关性

时间:2016-10-04 11:40:27

标签: python pandas dataframe statistics correlation

以下是代码段:

df = pd.DataFrame(data=[1,1,2,2,3,3,3], columns =list('A'))

def m(x):
    if x == 1:
        return 2
    if x == 2:
        return 3
    if x == 3:
        return 1
    return -1
df['B'] = df['A'].map(m)
print df.head(n=10)

   A  B
0  1  2
1  1  2
2  2  3
3  2  3
4  3  1
5  3  1
6  3  1

正如我们所看到的,B列是通过映射A列的值来创建的,因此它们应该具有值1的相关性,但是我从下面得到的结果并不令人满意。谁能给我一些关于如何计算两列离散数据相关性的想法?非常感谢!

df['A'].cov(df['B'])
-0.47619047619047611
df['A'].corr(df['B'], method='spearman')
-0.68000000000000016
df['A'].corr(df['B'], method='kendall')
-0.50000000000000011
df['A'].corr(df['B'])
-0.58823529411764708

1 个答案:

答案 0 :(得分:1)

第5行中的值向相反方向移动,这就是为什么得到-0.58823529411764708的相关性的原因。您可以看到在A列中第4个值为2,然后第5个值为3,因此您的序列在此列中增加。而在B列中,第4个值为3,然后第五个值为1,因此您的序列正在减少。你的计算没有问题。如果计算相关性直到第4行,您将得到相关系数= 1,因为两列中的值都移动到相同的方向。

您可以在这篇文章中找到一个很好的相关解释:https://stats.stackexchange.com/questions/29713/what-is-covariance-in-plain-language