首页 > 解决方案 > 如何排除一个列丢失和另一个具有特定值的条件?

问题描述

事情是这样的,我有一个名为 df 的数据框,如下所示:

id        value
NaN       10
NaN       0
ATT       0
ARS       0
ABB       10

我想在 id 缺失且值为零时排除所有行。

我想得到这个:

id        value
NaN       10
ATT       0
ARS       0
ABB       10

我试过了:

df[pd.isna(df['id']) & df['value']==0]

但它不起作用,并且不断排除比要求更多的行。

标签: pythonpandasmissing-data

解决方案


您需要更改(反转逻辑) - 选择所有不带NaNs 或不带 s 的行0,也因为优先级运算符()为第二个条件添加:

df = df[df['id'].notna() | (df['value']!=0)]
print (df)
    id  value
0  NaN     10
2  ATT      0
3  ARS      0
4  ABB     10

或使用Series.ne, then()不是必需的:

df = df[df['id'].notna() | df['value'].ne(0)]
print (df)
    id  value
0  NaN     10
2  ATT      0
3  ARS      0
4  ABB     10

或者可以反转原始掩码:

df = df[~(df['id'].isna() & (df['value']==0))]
print (df)
    id  value
0  NaN     10
2  ATT      0
3  ARS      0
4  ABB     10

推荐阅读