熊猫:获得正好为0的行

时间:2018-06-22 01:04:28

标签: 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。我的实际数据有更多列,因此我希望解决方案不涉及输入每个列标题。

3 个答案:

答案 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