首页 > 解决方案 > 查询数据框,但仅将过滤器应用于列值不是 NaN 的行

问题描述

我有一个数据框df:

num1 | count | count_min | count_max
a    | 10    | 5         | 10
b    | 15    | 6         | 11
c    | 3     | NaN       | NaN

我想过滤掉不在count_min和count_max之间的每个计数。

但如果 count_min/count_max 为 NaN,则应保留该行。

最终结果应该是:

num1 | count | count_min | count_max
a    | 10    | 5         | 10
c    | 3     | NaN       | NaN

因此,在我应用过滤器之前,我需要在查询中使用 if/else 之类的东西来检查 count_min/count_max 是否为 NaN。

如何使用以下查询语法来实现这一点:

df = df.query("count >= count_min and count <= count_max")

?

标签: pythonpandasfilternan

解决方案


使用Series.betweenSeries.isna

In [4487]: df = df[df['count'].between(df.count_min, df.count_max) | (df.count_max.isna() | df.count_min.isna())]

In [4487]: df
Out[4487]: 
  num1  count  count_min  count_max
0    a     10        5.0       10.0
2    c      3        NaN        NaN

推荐阅读