按阈值过滤 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
将另一个值替换为 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
我有一个 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
将另一个值替换为 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