Как заполнить пропуски в столбце на основании данных из нескольких других столбцов?

Мне необходимо заполнить пропуски в столбце 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
​
→ Ссылка