pandas - заполнить пропущенные значения, просматривая другие строки - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть pandas кадр данных, подобный этому:


Имя | Фамилия | ID дома

Джеймс | Поттер | 12345

Гарри | Поттер | NaN

Анакин | Скайуокер | NaN

Люк | Скайуокер | NaN


Я хочу заполнить пропущенные значения в столбце Идентификатор дома, просмотрев строки с одинаковыми фамилиями. Но, помня, я не могу сделать это для всех рядов, как семья Скайуокеров выше. Таким образом, результат будет:


Имя | Фамилия | Дом ID

Джеймс | Поттер | 12345

Гарри | Поттер | 12345

Анакин | Скайуокер | NaN

Люк | Скайуокер | NaN


Я запутался, проиндексировав и помня о формах, и я не мог написать функцию спуска без использования циклов for, что делает ее очень медленной.

1 Ответ

2 голосов
/ 21 февраля 2020
df = pd.DataFrame({
    'Name': ['James', 'Harry', 'Anakin', 'Luke'],
    'Lastname': ['Potter', 'Potter', 'Skywalker', 'Skywalker'],
    'House ID': ['12345', np.nan, np.nan, np.nan]
})
lookup_table = df[df['House ID'].notnull()][['Lastname', 'House ID']].drop_duplicates()
similar_addresses = (
    df[['Lastname', 'House ID']]
    .merge(lookup_table, how='left', on='Lastname', suffixes=['', '_same_last_name'])
    ['House ID_same_last_name']
)
df['House ID'] = df['House ID'].combine_first(similar_addresses)
>>> df
     Name   Lastname House ID
0   James     Potter    12345
1   Harry     Potter    12345
2  Anakin  Skywalker      NaN
3    Luke  Skywalker      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...