Итерация по фрейму данных и замена значения в зависимости от условия - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок в Python (из R) и не могу понять, как перебирать фрейм данных в Python.Ниже я привел таблицу данных и список возможных «вмешательств».Я пытаюсь выполнить поиск в столбце «Вмешательство» во фрейме данных, и если вмешательство находится в «интервале_перечисления», заменить значение «Да Вмешательство», но если «NaN» заменить на «Нет вмешательства».

Буду признателен за любые рекомендации или помощь.

import pandas as pd
intervention_list = ['Intervention 1', 'Intervention 2']
df = pd.DataFrame({'ID':[100,200,300,400,500,600,700],
                  'Intervention':['Intervention 1', 'NaN','NaN','NaN','Intervention 2','Intervention 1','NaN']})
print(df)

Я надеюсь, что готовый фрейм данных будет выглядеть так:

df_new = pd.DataFrame({'ID':[100,200,300,400,500,600,700],
                  'Intervention':['Yes Intervention', 'No Intervention','No Intervention','No Intervention','Yes Intervention','Yes Intervention','No Intervention']})
print(df_new)

Спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

В пандах лучше избегать петель, потому что медленные, поэтому используйте numpy.where с пропущенными значениями теста на Series.isna или Series.notna для векторизациирешение:

df['Intervention'] = np.where(df['Intervention'].isna(),'No Intervention','Yes Intervention')

Или:

df['Intervention'] = np.where(df['Intervention'].notna(),'Yes Intervention','No Intervention')

Если NaN - строка, то проверить по == или Series.eq:

df['Intervention']=np.where(df['Intervention'].eq('NaN'),'No Intervention','Yes Intervention')

Но, если необходимо, проверьте также список numpy.select:

m1 = df['Intervention'].isin(intervention_list)
m2 = df['Intervention'].isna()

#if not match m1 or m2 create default None
df['Intervention'] = np.select([m1, m2],
                              ['Yes Intervention','No Intervention'],
                              default=None)

#if not match m1 or m2 set original value column Intervention
df['Intervention'] = np.select([m1, m2],
                              ['Yes Intervention','No Intervention'],
                              default=df['Intervention'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...