Pandas groupby transform以获取非空日期值

3

我有一个如下构造的数据框:

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内,但我不确定要使用什么条件。

1个回答

2
您可以尝试以下操作。您的数据框定义和建议的输出包含不同的日期,因此我假设您的数据框定义是正确的。
df['birthdate'] = df.groupby('id').transform('first')

输出哪些内容。

   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

你说得对。输出中有一个打字错误。谢谢你的指出。而且,是的...这就解决了!所以首先的方法不受 null 值位置的影响。那很有趣。太棒了! - DudeWah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接