python 按条件筛选行_python-根据条件从任何列/行中选择值

我有一个数据框形式的相关矩阵.就像是:

xyz abc def

xyz 1 0.1 -0.2

abc 0.1 1 0.3

def -0.2 0.3 1

我需要能够选择高于或低于某个阈值的所有值,但是它们当然可以在任何行或列中.

例如,选择所有大于0.2的值.有两个结果:

(def,abc)和(abc,def)

我不确定如何执行此操作,因为它涉及根据每行/每列中的条件搜索值.理想情况下,输出应采用易于识别对的格式(例如:元组列表或类似内容)

编辑:哦,当然,所有相同的列/行也将出现在上述示例的结果中(即:xyz / xyz,abc / abc,def / def)

最佳答案

这是使用np.triu掩盖上三角矩阵并按堆栈重塑相关矩阵的一种方法.

import pandas as pd

import numpy as np

# simulate some data to generate corr_mat

# ==============================================

np.random.seed(0)

data = np.random.multivariate_normal([0,0,0], [[1,0.1,-0.2],[0.1,1,0.3],[-0.2,0.3,1]], 10000)

df = pd.DataFrame(data, columns='xyz abc def'.split())

corr_mat = df.corr()

corr_mat

xyz abc def

xyz 1.0000 0.1216 -0.1901

abc 0.1216 1.0000 0.3014

def -0.1901 0.3014 1.0000

# processing

# =======================================

# mask on lower-triangle only

mask = np.ones_like(corr_mat, dtype=np.bool)

mask[np.triu_indices_from(mask)] = False

mask

array([[False, False, False],

[ True, False, False],

[ True, True, False]], dtype=bool)

# reshape the correlation matrix, and select corr > 0.2

corr_stacked = corr_mat.stack()

corr_stacked[(corr_stacked > 0.2) & (mask.ravel())]

def abc 0.3014

dtype: float64

# you can reset_index to put multi-level index to columns

你可能感兴趣的:(python,按条件筛选行)