У меня есть датафрейм, сконструированный так:
df = pd.DataFrame({'id': [1,2,3,4,1,2,3,4],
'birthdate': ['01-01-01','02-02-02','03-03-03','04-04-04',
'','02-02-02','03-04-04','04-03-04']})
df['birthdate'] = pd.to_datetime(df['birthdate'])
Я хочу сделать групповую операцию, чтобы изменить исходные данные, используя pandas .transform
Условие, что я хочу чтобы выбрать birthdate
значение первой ненулевой строки для id
Я знаю, что могу сделать max
, если нет другой опции, чтобы избавиться от ненулевых записей, но если есть несоответствия, я не обязательно хочу максимальную дату, только ту, которая появляется первой в кадре данных.
Таким образом:
df['birthdate'] = df.groupby('id')['birthdate'].transform(max)
Вот так выглядит вывод, используя max
:
id birthdate
0 1 2001-01-01
1 2 2002-02-02
2 3 2003-03-03
3 4 2004-04-04
4 1 2001-01-01
5 2 2002-02-02
6 3 2004-03-04
7 4 2004-04-04
Вот как я на самом деле хочу, чтобы это выглядело:
id birthdate
0 1 2001-01-01
1 2 2002-02-02
2 3 2003-03-03
3 4 2004-04-04
4 1 2001-01-01
5 2 2002-02-02
6 3 2003-03-03
7 4 2004-04-04
Я почти уверен, что мне нужно создать клиента lambda
, чтобы поместить его в .transform
, но Я не уверен, какое условие использовать.