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
注意result
和so.loc['m']
是一样的。
IIUC,您可以将 corr()
DataFrame
切片,例如:
c = df.corr()['m'].abs()
so = c.sort_values(kind='quicksort')
print(so)
我知道如何创建(可爱的)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
注意result
和so.loc['m']
是一样的。
IIUC,您可以将 corr()
DataFrame
切片,例如:
c = df.corr()['m'].abs()
so = c.sort_values(kind='quicksort')
print(so)