Pandas 相关性 table 限于 m 列 x n 行

Pandas correlation table limited to m columns by n rows

我知道如何创建(可爱的)Pandas 相关性 table,按相关性排名:

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

太棒了。

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

但是,如果我只想检查一列,比如 df['m'],了解它与所有其他列的相关性怎么办?

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

您可以简单地遍历 df 的列并根据相关性构建一个系列:

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

如果您计划对许多列执行此操作,计算整个相关矩阵并使用 .loc 到 select 感兴趣的行可能会更快: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']是一样的。

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

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