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