Как заполнить пропуски в столбце на основании данных из нескольких других столбцов?
Мне необходимо заполнить пропуски в столбце birth_date значениями, которые уже известны для именно этих пользователей (на основании группировки по f_name, s_name и tel). Точно известно, что такие комбинации уникальны.
Возможно ли это сделать? Помогите пожалуйста!
import numpy as np
import pandas as pd
df = pd.DataFrame([['Иван', 'Иванов', '1', '01/01/2001'],
['Иван', 'Петров', '2', '02/02/2002'],
['Иван', 'Иванов', '3', '03/03/2003'],
['Иван', 'Иванов', '2', '04/04/2004'],
['Иван', 'Петров', '1', '05/05/2005'],
['Иван', 'Иванов', '3', np.nan],
['Иван', 'Петров', '1', np.nan]], columns=['f_name', 's_name', 'tel', 'birth_date'])
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно сделать группировкой с заполнением:
df["birth_date"] = df.groupby(["f_name", "s_name", "tel"])["birth_date"].apply(lambda x: x.sort_values().fillna(method="ffill"))
df:
f_name s_name tel birth_date
0 Иван Иванов 1 01/01/2001
1 Иван Петров 2 02/02/2002
2 Иван Иванов 3 03/03/2003
3 Иван Иванов 2 04/04/2004
4 Иван Петров 1 05/05/2005
5 Иван Иванов 3 03/03/2003
6 Иван Петров 1 05/05/2005
UPDATE
если у вас возникает ошибка incompatible index, то это происходит из-за того, что в процессе группировки у вас появляется мультииндекс
Можно попробовать исправить так:
res = df.groupby(["f_name", "s_name", "tel"]).apply(lambda x: x["birth_date"].
sort_values().fillna(method="ffill")).reset_index().sort_values("level_3").drop(columns=["level_3"])
res:
f_name s_name tel birth_date
0 Иван Иванов 1 01/01/2001
6 Иван Петров 2 02/02/2002
2 Иван Иванов 3 03/03/2003
1 Иван Иванов 2 04/04/2004
4 Иван Петров 1 05/05/2005
3 Иван Иванов 3 03/03/2003
5 Иван Петров 1 05/05/2005
