Python 按阈值筛选熊猫中的行值
我有一个关联矩阵数据框架,它有数百列和数百行。我想过滤整个数据帧,以便只获取高于某个值的单元格,例如,任何行值>0.4的单元格。我不知道最好的方法是什么。我看到过多篇按列名过滤的文章,但有数百列,如何遍历每一列 如果只想筛选行,请使用由Python 按阈值筛选熊猫中的行值,python,pandas,pearson-correlation,Python,Pandas,Pearson Correlation,我有一个关联矩阵数据框架,它有数百列和数百行。我想过滤整个数据帧,以便只获取高于某个值的单元格,例如,任何行值>0.4的单元格。我不知道最好的方法是什么。我看到过多篇按列名过滤的文章,但有数百列,如何遍历每一列 如果只想筛选行,请使用由创建的掩码,至少检查一个True: df[df.gt(.4).any(axis=1)] 或者,如果要筛选行和列: m = df.gt(.4) df.loc[m.any(axis=1), m.any()] 如果可以按条件仅需要值,请使用where将另一个值替换为
创建的掩码,至少检查一个True
:
df[df.gt(.4).any(axis=1)]
或者,如果要筛选行和列:
m = df.gt(.4)
df.loc[m.any(axis=1), m.any()]
如果可以按条件仅需要值,请使用where
将另一个值替换为NaN
s:
df.where(df.gt(.4))
样本:
np.random.seed(4137)
df = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
df['A'] /= 10
print (df)
A B C
0 0.090262 0.313517 0.319292
1 0.086841 0.346788 0.314144
2 0.044069 0.764295 0.886659
3 0.089739 0.230103 0.594301
4 0.047101 0.132819 0.692846
df1 = df[df.gt(.4).any(axis=1)]
print (df1)
A B C
2 0.044069 0.764295 0.886659
3 0.089739 0.230103 0.594301
4 0.047101 0.132819 0.692846
m = df.gt(.4)
df2 = df.loc[m.any(axis=1), m.any()]
print (df2)
B C
2 0.764295 0.886659
3 0.230103 0.594301
4 0.132819 0.692846
df3 = df.where(df.gt(.4))
print (df3)
A B C
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN 0.764295 0.886659
3 NaN NaN 0.594301
4 NaN NaN 0.692846
print (m)
A B C
0 False False False
1 False False False
2 False True True
3 False False True
4 False False True
print (m.any(axis=1))
0 False
1 False
2 True
3 True
4 True
dtype: bool
print (m.any())
A False
B True
C True
dtype: bool
详细信息:
np.random.seed(4137)
df = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
df['A'] /= 10
print (df)
A B C
0 0.090262 0.313517 0.319292
1 0.086841 0.346788 0.314144
2 0.044069 0.764295 0.886659
3 0.089739 0.230103 0.594301
4 0.047101 0.132819 0.692846
df1 = df[df.gt(.4).any(axis=1)]
print (df1)
A B C
2 0.044069 0.764295 0.886659
3 0.089739 0.230103 0.594301
4 0.047101 0.132819 0.692846
m = df.gt(.4)
df2 = df.loc[m.any(axis=1), m.any()]
print (df2)
B C
2 0.764295 0.886659
3 0.230103 0.594301
4 0.132819 0.692846
df3 = df.where(df.gt(.4))
print (df3)
A B C
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN 0.764295 0.886659
3 NaN NaN 0.594301
4 NaN NaN 0.692846
print (m)
A B C
0 False False False
1 False False False
2 False True True
3 False False True
4 False False True
print (m.any(axis=1))
0 False
1 False
2 True
3 True
4 True
dtype: bool
print (m.any())
A False
B True
C True
dtype: bool
谢谢你,耶斯雷尔。感谢您的帮助。