我有一个有很多0的数据帧,就像下面的df示例一样。我想删除三列或更多列中包含0的任何行,如下面的示例Resultdf。
下面的脚本将删除所有0
的记录dataTheFlash <- read.csv(
paste(strWF,"B_Allen_Is.txt",sep=""),
header = TRUE,
sep=";",
stringsAsFactors=FALSE,
colClasses = c('name_of_column'='character')
)
有没有办法对它进行修改,以便删除全部为0的记录,或者有三列或多列为0的记录?或者还有另一种方法吗?
print df:
df = df[(df.T != 0).any()]
打印Resultdf:
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
答案 0 :(得分:6)
您可以将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
答案 1 :(得分:2)
使用惯用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
答案 2 :(得分:2)
巧妙使用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