给出df:
foo bar baz
0 0 0
0 5 3
1 0 2
1 6 1
我只想获取正好为0的行:
foo bar baz
0 5 3
1 0 2
我知道df.loc[df['foo'] == 0]
将为我提供foo列中所有0的行,但不会跨行进行比较以确保只有一个0。我的实际数据有更多列,因此我希望解决方案不涉及输入每个列标题。
答案 0 :(得分:3)
您可以使用df.eq(0).sum(1).eq(1)
作为条件:
df[df.eq(0).sum(1).eq(1)]
# foo bar baz
#1 0 5 3
#2 1 0 2
元素是否等于0
:
df.eq(0)
# foo bar baz
#0 True True True
#1 True False False
#2 False True False
#3 False False False
按行计数零:
df.eq(0).sum(1)
#0 3
#1 1
#2 1
#3 0
#dtype: int64
检查每一行是否只有一个零:
df.eq(0).sum(1).eq(1)
#0 False
#1 True
#2 True
#3 False
#dtype: bool
答案 1 :(得分:1)
zero_cells = df.apply(lambda x: x==0, axis=0)
zero_counts = zero_cells.apply(lambda x: x.sum(), axis=1)
zero_counts[zero_counts == 1]
#0 False
#1 True
#2 True
#3 False
#dtype: bool
答案 2 :(得分:0)
@Psidom的最佳答案。只是为了玩耍,您也可以这样做
df[df[df==0].count(1) == 1]
oo bar baz
1 0 5 3
2 1 0 2