按阈值过滤 pandas 中的行值

Filtering row values in pandas by threshold value

我有一个 pandas 相关矩阵数据框,它有数百个列和行。我想过滤整个数据框,以便我只获得高于某个值的单元格,例如任何行值 > .4。我不确定最好的方法是什么。我看到过多个按列名过滤的帖子,但是有数百列,您将如何遍历每一列?

如果只想过滤行,请使用 boolean indexing with mask created by gt > with any 至少检查一个 True:

df[df.gt(.4).any(axis=1)]

或者如果要过滤行和列:

m = df.gt(.4)
df.loc[m.any(axis=1), m.any()]

如果只需要条件值是可能的,请使用 where 将另一个值替换为 NaNs:

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