Pandas 熊猫:获取正好有一个0的行

Pandas 熊猫:获取正好有一个0的行,pandas,dataframe,Pandas,Dataframe,鉴于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。我的实际数据有更多的列,因此我希望有一个解决方案不需要键入每个列的标题。您可以使用df.eq(0).sum(1).eq(1)作为条件: df[df.eq(0).sum(1

鉴于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。我的实际数据有更多的列,因此我希望有一个解决方案不需要键入每个列的标题。

您可以使用
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
您可以使用
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

谢谢你的帮助,真的很有帮助!谢谢你的帮助,真的很有帮助!