我有一个如下构造的数据框:
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
函数对原始数据进行分组操作。
条件是我想选择每个id
的第一个非空行的birthdate
值。
我知道如果没有其他选项可用,可以使用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
内,但我不确定要使用什么条件。