Python 根据所有列中的值有条件地删除列

Python 根据所有列中的值有条件地删除列,python,pandas,Python,Pandas,我有一个表示%丰度的计数矩阵,样本作为列,观察值作为行,例如: #OTUId 101.BGd_295 103.BGd_309 105.BGd_310 11.BGd_99 123.BGd_312 OTU_200 0.016806723 0.23862789 0.148210883 0.6783 0.126310471 OTU_54 0.253542133 0.169383866 0 0.113679432 0.173943294 O

我有一个表示%丰度的计数矩阵,样本作为列,观察值作为行,例如:

#OTUId  101.BGd_295  103.BGd_309  105.BGd_310  11.BGd_99   123.BGd_312  
OTU_200 0.016806723  0.23862789   0.148210883  0.6783      0.126310471  
OTU_54  0.253542133  0.169383866  0            0.113679432 0.173943294
OTU_2   0.033613445  16.58463833  19.66970146  16.06669119 20.92537833  
我试图使用pandas过滤数据帧,只保留那些至少有一个值高于0.5%的行。我最初发现了这个

df = df[(df > 0.5).sum(axis=1) >= 1]
我原以为这会起作用,但现在据我所知,这将保留行中的和大于0.5的那些。我如何修改此项以适应


谢谢

我认为更简单的解决方案是使用布尔数据帧的条件,然后检查每行至少一个
True
,最后一个过滤条件:


您的代码:

df = df[(df > 0.5).sum(axis=1) >= 1]


我认为更简单的解决方案是使用布尔数据帧的条件,然后检查每行是否至少有一个
True
,最后一个过滤条件:


您的代码:

df = df[(df > 0.5).sum(axis=1) >= 1]


但是在这种情况下,第二行“OTU_54”应该删除,因为没有超过0.5的值?嗯,期望的输出是什么?您在2d数据帧中工作-因此可以删除行、列或按条件将值替换为
NaN
或另一个标量。啊,我现在看到了,我认为,在我的例子中,返回True的“#OTUid”是索引,因此应该删除行。我看到它,然后使用
df=df。设置#index('#OTUid')
作为第一步。或者
df=df[(df.drop('#OTUid',axis=1)>0.5.any(axis=1)
但是在这种情况下,第二行“OTU_54”应该被删除,因为没有超过0.5的值?嗯,期望的输出是什么?您在二维数据帧中工作-因此可以删除行、列或者用条件将值替换为NaN或另一个标量。啊,我现在看到了,在我的例子中,返回True的'#OTUid',是索引,所以应该删除行。我看到它,然后使用
df=df.set_index('#OTUid')
作为第一步。或者
df=df[(df.drop('#OTUid',axis=1)>0.5)。任何(axis=1)
df = df[(df > 0.5).sum(axis=1) >= 1]
#boolean mask
print (df > 0.5)
   #OTUId  101.BGd_295  103.BGd_309  105.BGd_310  11.BGd_99  123.BGd_312
0    True        False        False        False       True        False
1    True        False        False        False      False        False
2    True        False         True         True       True         True

#count True values per row
print ((df > 0.5).sum(axis=1))
0    2
1    1
2    5
dtype: int64

#check values by condition
print ((df > 0.5).sum(axis=1) >= 1)
0    True
1    True
2    True
dtype: bool