Pandas相关表限于m列乘n行

时间:2016-05-19 19:17:02

标签: python pandas dataframe correlation

我知道如何创建一个(可爱的)Pandas相关表,按相关性排序:

c = df.corr().abs()
np.set_printoptions(threshold='nan')
s = c.unstack()
so = s.order(kind="quicksort")
pprint(so)

这很棒。

问题是,这会输出整个值矩阵的相关性 - 对于所有列x所有列,在交叉矩阵中。

但是,如果我只是想检查一列,例如df['m'],其所有其他列的相关性会怎么样?

我是否需要创建两个数据帧并检查它们之间的相关性?是否有更快的脚本?

2 个答案:

答案 0 :(得分:2)

你可以简单地遍历df的列并从相关性中构建一个系列:

result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
          .abs().sort_values())

如果您计划对许多列执行此操作,则可能更快地计算整个相关矩阵并使用.loc选择感兴趣的行:so.loc['m']

例如,

import numpy as np
import pandas as pd
np.random.seed(2016)

df = pd.DataFrame(np.random.random((4,4)), columns=list('klmn'))
result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
          .abs().sort_values())
print(result)
# l    0.041438
# n    0.086255
# k    0.393375
# m    1.000000
# dtype: float64

c = df.corr().abs()
s = c.unstack()
so = s.sort_values()  # s.order is deprecated. use s.sort_values
print(so.loc['m'])
# l    0.041438
# n    0.086255
# k    0.393375
# m    1.000000
# dtype: float64

注意resultso.loc['m']是相同的。

答案 1 :(得分:1)

IIUC,您可以将corr() DataFrame切片为:

c = df.corr()['m'].abs()
so = c.sort_values(kind='quicksort')
print(so)