Создать новый столбец в фрейме данных python 3 (pandas) на основе значения в другом столбце

Aug 16 2020

У меня есть фреймворк pandas, где мне нужно создавать новые столбцы на основе значений из других столбцов в фрейме данных. Вот фрейм данных

человек город государство страна

Чикаго, Иллинойс, США

B Финикс Аризона США

C Сан-Диего Калифорния США

Я хочу создать два новых столбца на основе значений в состоянии

  1. Создать новый столбец df ["city-north"] = df ['city'], где state = "Illinois"
  2. Создайте новый столбец df ["city-south"] = df ['city'], где состояние не равно "Illinois"

Я пытался

df.loc[((df['state'] == 'Illinois')), 'city-north'] = df['city']

df.loc[((df['state'] != 'Illinois')), 'city-south'] = df['city']

Но вторая строка кода, где не равно условию, не создает столбец «город-юг». Пожалуйста помоги

Ответы

1 jezrael Aug 16 2020 at 13:10

У меня все работает хорошо, если не создаются условия соответствия, отсутствующие значения:

df.loc[df['state'] == 'Illinois', 'city-north'] = df['city']
df.loc[df['state'] != 'Illinois', 'city-south'] = df['city']

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago        NaN
1      B    Phoenix     Arizona     USA        NaN    Phoenix
2      C  San Diego  California     USA        NaN  San Diego

Если нужны пустые строки значений для несоответствующих строк:

df['city-north'] = np.where(df['state'] == 'Illinois', df['city'], '')
df['city-south'] = np.where(df['state'] != 'Illinois', df['city'], '')

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago           
1      B    Phoenix     Arizona     USA               Phoenix
2      C  San Diego  California     USA             San Diego