我想根据特定列的范围值条件,用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
在边界内的每一列,然后过滤每一列,然后合并回原始列,但我想使内存成本降至最低。
有什么方法可以轻松地做到这一点吗?
答案 0 :(得分:1)
使用Series.where
:
df['col1']=df['col1'].where(df['col1'].between(5,15))
df['col2']=df['col2'].where(df['col2'].between(2,20))
答案 1 :(得分:0)
我会通过
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