首页 > 解决方案 > 在熊猫 groupby 中返回第一个日期

问题描述

我尝试创建一个显示给定组的最小(最低)数据的新功能。

我的数据如下所示:

动物ID cycle_nr 饲料日期 开始日期周期
1 一个 2021-02-06 2020-09-20
1 一个 2021-02-10 2020-09-20
1 2021-02-14 2020-09-20
2 一个 2021-02-20 2020-09-30
2 一个 2021-02-21 2020-09-30

对于每个animal_idand cycle_nr,我想返回第一个feed_date

我想要的 df 看起来像这样

动物ID cycle_nr 饲料日期 开始日期周期 first_feed_date
1 一个 2021-02-06 2020-09-20 2021-02-06
1 一个 2021-02-10 2020-09-20 2021-02-06
1 2021-02-14 2020-09-20 2021-02-14
2 一个 2021-02-20 2020-09-30 2021-02-20
2 一个 2021-02-21 2020-09-30 2021-02-20

我尝试了多种方法,但这些选项都没有返回正确的值:

df['first_feed_date'] = df.groupby(['animal_id', 'cycle_nr']).agg({'feed_date' : np.min})
df['first_feed_date'] = df.loc[df.groupby(['animal_id', 'cycle_nr'])['feed_date'].idxmin()]
df['first_feed_date']= df.groupby(["animal_id", "cycle_nr"])["feed_date"].transform(min)
df['first_feed_date'] = df.groupby(["animal_id", "cycle_nr"])["feed_date"](['first'])

谁能帮帮我?

标签: pythonpandaspandas-groupby

解决方案


尝试:

首先将 'feed_date' 和 'start_date_cycle' 列转换为日期时间:

df['feed_date']=pd.to_datetime(df['feed_date'])
df['start_date_cycle']=pd.to_datetime(df['start_date_cycle'])

最后使用groupby()and transform()

df['first_feed_date']=df.groupby(["animal_id", "cycle_nr"])['feed_date'].transform('first')

输出df

  animal_id     cycle_nr        feed_date   start_date_cycle    first_feed_date
0   1           A               2021-02-06  2020-09-20          2021-02-06
1   1           A               2021-02-10  2020-09-20          2021-02-06
2   1           B               2021-02-14  2020-09-20          2021-02-14
3   2           A               2021-02-20  2020-09-30          2021-02-20
4   2           A               2021-02-21  2020-09-30          2021-02-20

推荐阅读