【问题标题】:Drop rows of a Pandas dataframe if the value of range columns 0如果范围列的值为 0,则删除 Pandas 数据帧的行
【发布时间】:2020-03-23 08:30:08
【问题描述】:

数据框:

df = pd.DataFrame({'a':['NA','W','Q','M'], 'b':[0,0,4,2], 'c':[0,12,0,2], 'd':[22, 3, 34, 12], 'e':[0,0,3,6], 'f':[0,2,0,0], 'h':[0,1,1,0] })
df
    a   b   c   d   e   f   h
0   NA  0   0   22  0   0   0
1   W   0   12  3   0   2   1
2   Q   4   0   34  3   0   1
3   M   2   2   12  6   0   0

如果b 列和所有e 列的值都包含0,我想删除整行

基本上我想得到这样的东西

a   b   c   d   e   f   h
1   W   0   12  3   0   2   1
2   Q   4   0   34  3   0   1
3   M   2   2   12  6   0   0

【问题讨论】:

    标签: python pandas python-2.7 dataframe


    【解决方案1】:

    如果想要从e 测试到结束列和DataFrame.assign 添加的b 列使用DataFrame.loc 进行选择,测试DataFrame.ne 是否不相等,然后如果aby 值匹配(这意味着不是所有@ 987654331@) 和 DataFrame.any 和最后一个过滤器 boolean indexing:

    df = df[df.loc[:, 'e':].assign(b = df['b']).ne(0).any(axis=1)]
    print (df)
       a  b   c   d  e  f  h
    1  W  0  12   3  0  2  1
    2  Q  4   0  34  3  0  1
    3  M  2   2  12  6  0  0
    

    【讨论】:

    • 谢谢。但我想要列b 和范围e: to_end_end
    • 这正是我需要的,它与最新版本的 od pandas 完美配合,但不适用于0.17。我在产品上运行0.17
    • @Ayalew - 对于较旧的 pandas 版本,请使用 df = df[df.loc[:, 'e':].join(df['b']).ne(0).any(axis=1)]
    猜你喜欢
    • 2019-01-23
    • 2022-10-06
    • 1970-01-01
    • 2018-04-28
    • 2014-11-04
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多