Python 执行groupby转换以获取非空的日期值

Python 执行groupby转换以获取非空的日期值,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个这样构造的数据帧: 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['birth

我有一个这样构造的数据帧:

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

我知道,如果没有其他选项可以消除not null条目,我可以执行
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
中,但我不确定要使用什么条件。

您可以尝试以下方法。您的数据帧定义和建议的输出包含不同的日期,因此我假设您的数据帧定义是正确的

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值的位置如何,first都起作用。这很有趣。令人惊叹的!