Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件从任意列/行中选择值_Python_Pandas - Fatal编程技术网

Python 根据条件从任意列/行中选择值

Python 根据条件从任意列/行中选择值,python,pandas,Python,Pandas,我有一个数据帧形式的相关矩阵。比如: xyz abc def xyz 1 0.1 -0.2 abc 0.1 1 0.3 def -0.2 0.3 1 df[df>value] or 我需要能够选择高于或低于某个阈值的所有值,但它们当然可以在任何行或列中 例如,选择高于0.2的所有值。有两个结果: (def,abc)和(abc,def) 我不知道该怎么做,因为它涉及到根据每一行/每一列中的条件搜索值。理想情况下,输出应采用易于

我有一个数据帧形式的相关矩阵。比如:

       xyz   abc  def
xyz    1     0.1  -0.2
abc    0.1   1    0.3
def    -0.2  0.3  1
df[df>value] or
我需要能够选择高于或低于某个阈值的所有值,但它们当然可以在任何行或列中

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

(def,abc)和(abc,def)

我不知道该怎么做,因为它涉及到根据每一行/每一列中的条件搜索值。理想情况下,输出应采用易于识别对的格式(例如:元组列表或类似的格式)


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

将((行,列),val)的二维到一维元组展平。按val排序。检索val>0.2的元组(行、列)假设您的数据帧为“df”,阈值为“value”,您可以执行以下操作:

       xyz   abc  def
xyz    1     0.1  -0.2
abc    0.1   1    0.3
def    -0.2  0.3  1
df[df>value] or

df[df>值].dropna(axis=1,how=“all”)
如果要删除不匹配的列。

这里有一种方法,使用
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

但是值
1
不也高于
0.2
?所以你不想选那个?我会先在水平线上循环,然后在垂直线上循环。实际上我不想要那个。但是,如果它们包含在元组列表中,我就可以在此时过滤掉它们。我正在努力解决的部分是从数据帧中获取值。谢谢,我已经完成了创建循环结构的工作。我希望有一种矢量化的方法来实现它,而不需要循环,因为这样通常更快(我的数据帧很大)。不过,这至少在目前是可行的。谢谢,这听起来似乎会奏效,但我不确定如何获得1d元组((行,列),val)。我已经尝试将list(df.itertuples())转换为dict(*args,**kwargs)将数据帧转换为字典。