Pandas использование apply () для запуска функции только в части фрейма данных - PullRequest
1 голос
/ 07 августа 2020

Я использую адреса, хранящиеся в столбцах pandas фрейма данных, в качестве аргументов функции для вызова API Карт Google и сохранения результатов в столбце с именем address_components в том же фрейме данных

dm.loc[: , 'address_components'] = dm.loc[:, ['streetNumber', 'streetName', 'city']].apply(
    lambda row: get_address(row[0], row[1], row[2]), axis=1)

Весь фрейм данных очень велик, и я хотел бы запустить ту же функцию в части фрейма данных, которая соответствует определенному условию c. Я пробовал это:

dm[dm['g_FSA'] == 'None'].loc[: , 'address_components'] = dm[dm['g_FSA'] == 'None'].loc[:, ['streetNumber', 'streetName', 'city']].apply(
    lambda row: get_address(row[0], row[1], row[2]), axis=1)

Но это не работает должным образом. Может ли кто-нибудь помочь мне обнаружить мою ошибку?

1 Ответ

1 голос
/ 07 августа 2020

Создайте логическую маску, используя Series.eq, затем используйте эту маску вместе с DataFrame.loc, чтобы выбрать определенные c строки и столбцы, затем используйте DataFrame.apply для применения пользовательская функция:

m = dm['g_FSA'].eq('None')
dm.loc[m, 'address_components'] = (
    dm.loc[m, ['streetNumber', 'streetName', 'city']]
    .apply(lambda s: get_address(*s), axis=1)
)
...