Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除具有3个或更多列且为0的记录_Python_Pandas - Fatal编程技术网

Python 删除具有3个或更多列且为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

我有一个数据帧,它有很多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       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;-)