我知道如何创建一个(可爱的)Pandas相关表,按相关性排序:
c = df.corr().abs()
np.set_printoptions(threshold='nan')
s = c.unstack()
so = s.order(kind="quicksort")
pprint(so)
这很棒。
问题是,这会输出整个值矩阵的相关性 - 对于所有列x所有列,在交叉矩阵中。
但是,如果我只是想检查一列,例如df['m']
,其所有其他列的相关性会怎么样?
我是否需要创建两个数据帧并检查它们之间的相关性?是否有更快的脚本?
答案 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
注意result
和so.loc['m']
是相同的。
答案 1 :(得分:1)
IIUC,您可以将corr()
DataFrame
切片为:
c = df.corr()['m'].abs()
so = c.sort_values(kind='quicksort')
print(so)