用DataFrame的NaN替换特定范围的值

时间:2019-10-25 21:55:38

标签: python python-3.x pandas dataframe filter

我想根据特定列的范围值条件,用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在边界内的每一列,然后过滤每一列,然后合并回原始列,但我想使内存成本降至最低。

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

2 个答案:

答案 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