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都起作用。这很有趣。令人惊叹的!