Замена определенных диапазонов значений на NaNs DataFrame - PullRequest
1 голос
/ 26 октября 2019

Я хочу заменить диапазон значений для нескольких столбцов на NaN, исходя из условий значений диапазона для этого конкретного столбца.

Т.е.: предположим, у меня было [col1_min = 5, col1_max = 15], и [col2_min = 2, col2_max = 20], и столбцы выглядели какthis:

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

Псевдокод, который я мог бы сделать, это groupby каждый столбец в пределах границы, используя 'df.groupby (' col1 'или'col2') 'и затем отфильтруйте каждый столбец, затем объедините его с оригиналом, но я бы хотел свести к минимуму стоимость памяти.

Есть ли способ сделать это легко?

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Использование Series.where:

df['col1']=df['col1'].where(df['col1'].between(5,15))
df['col2']=df['col2'].where(df['col2'].between(2,20))
0 голосов
/ 26 октября 2019

Я сделаю это к

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...