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