python - 如何在熊猫中选择相关性高于阈值的特征对?
问题描述
我有一个看起来像这样correlation matrix
的数据框:pandas
import pandas as pd
foo = pd.DataFrame({'vars': ['col_a', 'col_b', 'col_c', 'col_d'],
'col_a': [1, 0.9, 0.04, 0.03],
'col_b': [0.9,1,0.05,0.03],
'col_c': [0.04, 0.05, 1, -0.04],
'col_d': [0.03, 0.03, -0.04,1]})
我想获得所有在绝对值上具有一定相关性并排除自相关性的唯一“对”threshold
所以,如果阈值是0.8
,我应该得到这样的东西:
[('col_a', 'col_b')]
任何想法我怎么能做到这一点?
解决方案
您可以将 'vars' 设置为索引,stack
并使用输出进行切片:
pairs = foo.set_index('vars').stack()
pairs[pairs.abs().gt(0.8)]
输出:
vars
col_a col_a 1.0
col_b 0.9
col_b col_a 0.9
col_b 1.0
col_c col_c 1.0
col_d col_d 1.0
作为列表:
pairs = foo.set_index('vars').stack()
list(pairs[pairs.gt(0.8)].index)
[('col_a', 'col_a'), ('col_a', 'col_b'), ('col_b', 'col_a'), ('col_b', 'col_b'), ('col_c', 'col_c'), ('col_d', 'col_d')]
如果您只想获得唯一的对(例如,B vs A == A vs B)并放弃自相关(例如,A vs A),请使用此替代方法。
np.triu
可以只保留相关矩阵中的一个三角形,并且该k
参数允许移动对角线(k=0
保留对角线,k=1
删除对角线,因此如果要保持自相关,请使用k=0
)
import numpy as np
foo = foo.set_index('vars')
pairs = foo.where(np.triu(foo, k=1).astype(bool)).stack()
list(pairs[pairs.abs().gt(0.8)].index)
输出:
[('col_a', 'col_b')]
推荐阅读
- python-2.7 - 有没有办法只在电路断开期间播放 pygame.mixer.Sound?
- git - 如何配置 magit 以使 magit-status 结果与 'git status -s' 相同
- python - 过滤 mongoengine 查询
- python - 肘部光滑时如何确定最佳kmeans
- tensorflow - 如何快速改变 tensorflow/keras 神经网络的权重?
- sqlite - 查找和删除及时接近的记录
- vba - 操作系统的位数是否重要,或者只是我需要担心的应用程序?
- r - 合并来自同一数据框的行
- django - 如何设置我继承的 virtualenv
- php - 如何更新选定的行?