用数据框的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替换特定范围的值的主要内容,如果未能解决你的问题,请参考以下文章