繁体   English   中英

根据列值在熊猫数据框中删除行

[英]Drop rows in pandas dataframe based on columns value

我有一个像这样的数据框:

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)]

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

现在,您会得到“如果它们都是肯定的”或“任何都不为空”。 您想要“如果全部都是(正数或null)”。 (将非负数> 0替换为>=0

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM