Python 从唯一ID创建具有第一个和最后一个日期的列

Python 从唯一ID创建具有第一个和最后一个日期的列,python,pandas,dataframe,Python,Pandas,Dataframe,我有下面的数据集,我想从该特定ID提取第一次和最后一次出现的日期。最后一次和第一次出现的结果应该是: id date last_apparence first_apparence 653777 2021-02-19 2021-02-19 2021-02-19 1873547 2021-02-19 2021-02-19 2021-02-19 657443 202

我有下面的数据集,我想从该特定ID提取第一次和最后一次出现的日期。最后一次和第一次出现的结果应该是:

id            date           last_apparence     first_apparence
653777        2021-02-19     2021-02-19         2021-02-19
1873547       2021-02-19     2021-02-19         2021-02-19
657443        2021-02-19     2021-02-19         2021-02-19
653777        2021-02-20     2021-02-20         2021-02-19
例如,ID 653777出现在19号和20号,在本例中,第一次出现在19号,最后一次出现在20号。我试着用

我尝试使用下面的代码,但得到了整个列的相同值

df['latest_apparence'] = df['date'][df.index[-1]]
我的上一个方法是使用groupby,但即使尝试了一组不同的组,我得到的最接近的结果是类似于excel中的countif公式,但我没有得到第一个/最后一个日期,只有id在数据集中显示了多少次

df.groupby(['id'])[['date']].count()
有人知道得到这个结果的最好方法是什么吗


谢谢

让我们试试
groupby
transform

df['latest_apparence'] = df.groupby('id')['date'].transform('max')
df['first_apparence'] = df.groupby('id')['date'].transform('min')

让我们尝试使用
transform

df['latest_apparence'] = df.groupby('id')['date'].transform('max')
df['first_apparence'] = df.groupby('id')['date'].transform('min')

根据您想要数据的方式,您可以


dt=df.groupby('id')['date'].agg(['min','max'])。重命名(列={'min':'first_date','max':'last_date'})
打印(dt)
#或者像Beny建议的那样进行广播
#AGG是最小值和最大值的集合
#df.groupby('id')['date'].transform(AGG)

根据您需要数据的方式,您可以


dt=df.groupby('id')['date'].agg(['min','max'])。重命名(列={'min':'first_date','max':'last_date'})
打印(dt)
#或者像Beny建议的那样进行广播
#AGG是最小值和最大值的集合
#df.groupby('id')['date'].transform(AGG)

我喜欢变换函数。这是辉煌的我爱转换功能。太棒了