用数据框的NaN替换特定范围的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用数据框的NaN替换特定范围的值相关的知识,希望对你有一定的参考价值。

我想根据特定列的范围值条件,用NaN替换多个列的值范围。

即:假设我有[col1_min = 5, col1_max = 15][col2_min = 2, col2_max = 20],各列看起来像这样:

df = pd.DataFrame({'col1':[1,50,15,10,4], 'col2':[12,10,100,11,56]})

col1   col2
1      12
50     10
15     100
10     11
4      56

所需的输出将是:

df_filtered

col1   col2
nan    12
nan    10
15     nan
10     11
4      nan

我可以做的伪代码是使用'df.groupby('col1'或'col2')'在边界内的每一列groupby,然后过滤每一列然后合并回原始列,但我想保留内存成本降至最低。

有什么方法可以轻松地做到这一点吗?

答案

使用Series.where

df['col1']=df['col1'].where(df['col1'].between(5,15))
df['col2']=df['col2'].where(df['col2'].between(2,20))
另一答案

我会通过]完成>

condition = {'col1':[5,15],'col2':[2,20]}
pd.concat([df.loc[df[x].between(*y),x]for x, y  in condition.items()],axis=1)
Out[313]: 
   col1  col2
0   NaN  12.0
1   NaN  10.0
2  15.0   NaN
3  10.0  11.0

以上是关于用数据框的NaN替换特定范围的值的主要内容,如果未能解决你的问题,请参考以下文章

用相同的值替换特定行中的所有 NaN - Matlab

用 NaN 替换 'UN' 表示的值

Pandas - 用特定组的平均值替换列中的 NaN

通过 Pandas 中的函数替换 NaN 时索引超出范围

如何遍历数据框的行并检查列行中的值是不是为 NaN

Pandas 多索引行和列:用匹配行中的值替换 NaN