python - 在熊猫 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_id
and 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'])
谁能帮帮我?
解决方案
尝试:
首先将 '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
推荐阅读
- excel - 带范围的 Excel VBA Vlookup
- python-3.x - 根据列表值更新列 Dataframe 列
- java - 无法从资源加载文件,路径似乎错误
- python - 将文本保存到单独的文件中,作为整数而不是字符串。PYTHON
- angular - ag-Grid 导出到 CSV 未显示正确的文件名
- javascript - 天蓝色 devops 构建期间的角度错误
- dialogflow-es - 将 Fulfillment 与 DialogueFlow 一起使用时播放音频文件
- javascript - JavaScript 变量等于 jQuery 选择器创建打开和关闭标签。为什么?
- rabbitmq - 异步处理消息时处理异常的 RabbitMQ 最佳实践
- python - 将多个 csv 文件导入 QGIS 时出错