我有以下 pandas 数据框Top15
:
我创建了一个估计每人可引用文件数量的列:
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
我想知道人均引用文件数量与人均能源供应之间的相关性。因此,我使用了.corr()
方法(皮尔逊相关性):
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
我想返回一个数字,但是结果是:
没有实际数据,很难回答这个问题,但是我想您正在寻找这样的东西:
Top15['Citable docs per Capita'].corr(Top15['Energy Supply per Capita'])
这样就可以计算出两列 'Citable docs per Capita'
和之间的相关性'Energy Supply per Capita'
。
举个例子:
import pandas as pd
df = pd.DataFrame({'A': range(4), 'B': [2*i for i in range(4)]})
A B
0 0 0
1 1 2
2 2 4
3 3 6
然后
df['A'].corr(df['B'])
给出1
预期。
现在,如果您更改一个值,例如
df.loc[2, 'B'] = 4.5
A B
0 0 0.0
1 1 2.0
2 2 4.5
3 3 6.0
命令
df['A'].corr(df['B'])
退货
0.99586
仍接近预期的1。
如果.corr
直接应用于数据框,它将返回列之间的所有成对关联;这就是为什么您然后1s
在矩阵的对角线处进行观察的原因(每列与自身完全相关)。
df.corr()
因此将返回
A B
A 1.000000 0.995862
B 0.995862 1.000000
在您显示的图形中,仅表示相关矩阵的左上角(我假设)。
在某些情况下,您可以NaN
在解决方案中找到s-请查看此示例。
如果要过滤高于或低于特定阈值的条目,可以检查此问题。如果要绘制相关系数的热图,则可以检查该答案,如果然后遇到轴标签重叠的问题,请检查以下文章。
可以逐行应用吗?
@ Dr.DOOM:是的,它只需要进行序列化,因此例如
df.loc[1, :].corr(df.loc[2, :])
也可以正常工作。对于整个数据框,您可以简单地转置:df.T.corr()
。我尝试了您的建议,但是即使使用df.loc [2,'B'] = 4.5更改了B列中的a值,计算仍然返回1。也许我只是对计算感到困惑
@ Dr.DOOM:很难提供帮助,因为我不知道您的代码。我是否正确理解以上示例返回
1
的不是您的情况0.99586
?@Cleb:好吧,在我工作的环境中,每个更高级别的多列索引都有相同的子层。请参阅以下问题以了解我要执行的操作:stackoverflow.com/questions/57513002/…