按阈值过滤pandas中的行值

时间:2018-02-11 15:39:17

标签: python pandas pearson-correlation

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

1 个答案:

答案 0 :(得分:0)

如果只希望过滤行,请boolean indexing使用gt >any创建的掩码,以检查至少一个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