Как применить несколько условий if / else в Dataframe, используя apply и lambda? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь обновить определенные строки в столбце на основе набора условий. Например, в приведенном ниже примере я пытаюсь обновить имена столбцов «Страна» до более короткой версии, основанной на нескольких операторах if, и вот что я использую. Есть ли лучший способ сделать это?

energy['Country'] = energy['Country'].apply(lambda x: 'South Korea' if x=='Republic of Korea' 
                        else('United States' if x=='United States of America20' 
                        else('United Kingdom' if x=='United Kingdom of Great Britain and Northern Ireland'
                        else('Hong Kong' if x=='China, Hong Kong Special Administrative Region' 
                             else x))))

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Использование pd.Series.map

country_map = {'Republic of Korea': 'South Korea',
               'United States of America20': 'United States of America',
               'United Kingdom of Great Britain and Northern Ireland': 'United Kingdom',
               'China, Hong Kong Special Administrative Region': 'Hong Kong'}

energy['Country'] = energy['Country'].map(country_map)
0 голосов
/ 12 февраля 2020

Столько, сколько вы можете, избегайте DataFrame.apply, который является скрытым l oop. Рассмотрим векторизованную обработку, такую ​​как numpy.select, где вы передаете векторы (т. Е. Numpy массивы или Pandas серии) в метод, а не скалярные элементы по одному:

energy['Country'] = np.select([energy['Country'] == 'South Korea', 
                               energy['Country'] == 'United States', 
                               energy['Country'] == 'United Kingdom', 
                               energy['Country'] == 'Hong Kong'],
                              ['Republic of Korea', 
                               'United States of America', 
                               'United Kingdom of Great Britain and Northern Ireland'
                               'China, Hong Kong Special Administrative Region'])
...