Какой самый чистый способ создания нового столбца на основе условного существующего столбца? - PullRequest
1 голос
/ 12 апреля 2019

В пандах у меня в настоящее время есть фрейм данных, содержащий столбец строк: {Городской, Пригородный, Сельский}. Столбец, который я хотел бы создать, является условным для первого столбца (т. Е. Городской, пригородный, сельский связаны с соответствующими цветами) {Coral, Skyblue, Gold}

Я попытался скопировать первый столбец и затем использовать .replace, но мой новый столбец теперь возвращает значения NaN вместо цветов.

new_column = merge_table["type"]
merge_table["color"] = new_column

color_df = merge_table["color"].replace({'Urban': 'Coral', 'Suburban': 'Skyblue', 'Rural': 'Gold'})



data = pd.DataFrame({'City Type': type,
                           'Bubble Color': color_df    
                          })
data.head()

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы можете сделать

 merge_table['New col']=merge_table["color"].replace({'Urban': 'Coral', 'Suburban': 'Skyblue', 'Rural': 'Gold'})
0 голосов
/ 12 апреля 2019

Хорошо.в будущем стоит набирать коды с использованием «примеров кода», чтобы мы могли легче просматривать ваш код.

Множество областей может улучшить ваш код.Во-первых, вы делаете все это одной строкой:

merge_table["color"] = merge_table["type"].map(mapping_dictionary)

Series.map () для вашей информации примерно в 4 раза быстрее, чем Series.replace ().

и другие советы:

  1. никогда не используйте тип в качестве имени переменной, используйте что-то более конкретное, например city_type.тип уже является стандартным встроенным методом

    data = pd.DataFrame({'City Type': city_type, 'Bubble Color': color_df})
    
  2. , если сделать копию столбца, используйте:

    a_series = df['column_name'].copy()
    
...