我有一个数据框
[1] df
ProductIds A B C D
11210000018 0 0 0 0
11210000155 1 0 0 0
11210006508 0 0 0 0
11210007253 0 0 0 0
11210009431 0 0 0 0
11210135871 1 0 0 0
我想通过添加每一行来过滤帧,如果sum大于零,则过滤该行。对于给定的条件,结果将类似于
ProductIds A B C D
11210000155 1 0 0 0
11210135871 1 0 0 0
这样做的一种方法是使用sum添加另一列,然后按以下方式过滤:
df['Sum'] = df.sum(axis = 1)
df = df[df.Sum > 0]
df.drop(['Sum']
但是有没有一个内置的内置方法来做到这一点?我无法手动添加列,因为有数千列。感谢。
答案 0 :(得分:1)
我认为如果DataFrame
只有0
且数字高于0
,则可以使用DataFrame.all
- 测试行中是否所有值0
和然后使用boolean indexing
:
mask = (df == 0).all(axis=1)
print (mask)
ProductIds
11210000018 True
11210000155 False
11210006508 True
11210007253 True
11210009431 True
11210135871 False
dtype: bool
print (df[~mask])
A B C D
ProductIds
11210000155 1 0 0 0
11210135871 1 0 0 0
更通用的解决方案是在boolean indexing
中使用boolean mask
- 不是必要的创建新列:
df = df[df.sum(axis = 1) > 0]
答案 1 :(得分:0)
另一种解决方案:
In [194]: df.query('A + B + C + D > 0')
Out[194]:
A B C D
ProductIds
11210000155 1 0 0 0
11210135871 1 0 0 0