代码之家  ›  专栏  ›  技术社区  ›  F. Suyuti

如果某列中的每一行值不为零,则过滤数据帧

  •  0
  • F. Suyuti  · 技术社区  · 7 年前

    我有一个熊猫数据框,看起来像这样:

    'a', 'b', 'c' ,'d', ...., 'z'
    -----------------------------
    1  , 2  , 3   , 4 , ...., 6
    1  , 0  , 3   , 4 , ...., 6
    0  , 0  , 0   , 4 , ...., 6
    

    例如,如果我想使用单列进行过滤 a 不可能是零,我可以这样做

    `df = df[df.a != 0]`
    

    但是如果我需要使用多个列进行过滤,例如 b 不能为零?

    结果是我想要这样的东西:

    'a', 'b', 'c' ,'d', ...., 'z'
    -----------------------------
    1  , 2  , 3   , 4 , ...., 6
    1  , 0  , 3   , 4 , ...., 6
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   jezrael    7 年前

    您可以将过滤列与 0 具有 ne (与相同 != )然后检查是否至少有一个 True s/行 any :

    print (df[['a','b']])
       a  b
    0  1  2
    1  1  0
    2  0  0
    
    print (df[['a','b']].ne(0))
           a      b
    0   True   True
    1   True  False
    2  False  False
    
    print (df[['a','b']].ne(0).any(1))
    0     True
    1     True
    2    False
    dtype: bool
    
    df = df[df[['a','b']].ne(0).any(1)]
    print (df)
       a  b  c  d  z
    0  1  2  3  4  6
    1  1  0  3  4  6