【问题标题】:Drop rows in pandas dataframe based on columns value根据列值删除熊猫数据框中的行
【发布时间】:2015-12-13 21:25:23
【问题描述】:

我有一个这样的数据框:

cols = [ 'a','b']
df = pd.DataFrame(data=[[NaN, -1, NaN, 34],[-32, 1, -4, NaN],[4,5,41,14],[3, NaN, 1, NaN]], columns=['a', 'b', 'c', 'd'])

我想检索所有行,当列“a”和“b”为非负数但如果其中任何一个或全部丢失时,我想保留它们。

结果应该是

   a   b   c   d
2  4   5  41  14
3  3 NaN   1 NaN

我已经尝试过了,但它没有给出预期的结果。

df[(df[cols]>0).all(axis=1) | df[cols].isnull().any(axis=1)]

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC,你真的想要

    >>> df[((df[cols] > 0) | df[cols].isnull()).all(axis=1)]
       a   b   c   d
    2  4   5  41  14
    3  3 NaN   1 NaN
    

    现在你得到“如果他们都是积极的”或“任何都是空的”。你想要“如果他们都是(积极的或空的)”。 (将> 0 替换为>=0 以表示非否定性。)

    由于 NaN 不是正数,我们可以通过翻转条件来简化,并使用类似

    >>> df[~(df[cols] <= 0).any(axis=1)]
       a   b   c   d
    2  4   5  41  14
    3  3 NaN   1 NaN
    

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2017-06-26
      相关资源
      最近更新 更多