Python 删除具有3个或更多列且为0的记录
我有一个数据帧,它有很多0,如下面的df示例。我想删除三列或更多列中包含0的任何行,如下面的示例Resultdf 下面的脚本将删除所有0的记录Python 删除具有3个或更多列且为0的记录,python,pandas,Python,Pandas,我有一个数据帧,它有很多0,如下面的df示例。我想删除三列或更多列中包含0的任何行,如下面的示例Resultdf 下面的脚本将删除所有0的记录 df = df[(df.T != 0).any()] 有没有办法修改它,使其删除全部为0的记录,或者有三列或更多列为0的记录?还是有别的办法 打印df: ind_key prtCnt fldCnt TmCnt bmCnt 1 0 0 0 0 2 2 0 0 3 3
df = df[(df.T != 0).any()]
有没有办法修改它,使其删除全部为0的记录,或者有三列或更多列为0的记录?还是有别的办法
打印df:
ind_key prtCnt fldCnt TmCnt bmCnt
1 0 0 0 0
2 2 0 0 3
3 0 1 0 0
4 0 1 1 0
打印结果DF:
ind_key prtCnt fldCnt TmCnt bmCnt
2 2 0 0 3
4 0 1 1 0
您可以将
sum
与axis=1一起使用
df[df.eq(0).sum(1)<3] # eq mean '=='
Out[523]:
ind_key prtCnt fldCnt TmCnt bmCnt
1 2 2 0 0 3
3 4 0 1 1 0
df[df.eq(0).sum(1)使用惯用的dropna
和thresh
标志集:
df[df != 0].dropna(thresh=len(df.columns) - 2, axis=0)
ind_key prtCnt fldCnt TmCnt bmCnt
1 2 2.0 NaN NaN 3.0
3 4 NaN 1.0 1.0 NaN
巧妙地使用numpy.argpartition
。我们从一个不等于零的布尔数组开始。然后我们将每行划分为三个最低值和其余值。如果至少有3个零,那么前三个元素都将返回false
df[~(df.values != 0).argpartition(3, 1)[:, :3].all(1)]
ind_key prtCnt fldCnt TmCnt bmCnt
1 2 2 0 0 3
3 4 0 1 1 0
添加了一个alt;-)