【发布时间】:2021-04-16 08:42:14
【问题描述】:
我有一个数据框,我需要按类型和年份分组以计算组内的日期差异。
输入
df1 = pd.DataFrame({'type': ['type1', 'type1', 'type1','type1','type1','type3','type3','type3','type3'],
'date': ['2017-3-30','2017-5-10','2017-12-15','2018-01-15','2018-05-01','2018-01-30','2018-06-27','2019-03-20','2019-05-21'],
'year': [2017, 2017, 2017,2018,2018,2018,2018,2019,2019]})
type date year
0 type1 2017-3-30 2017
1 type1 2017-5-10 2017
2 type1 2017-12-15 2017
3 type1 2018-01-15 2018
4 type1 2018-05-01 2018
5 type3 2018-01-30 2018
6 type3 2018-06-27 2018
7 type3 2019-03-20 2019
8 type3 2019-05-21 2019
我尝试了以下解决方案,它为我提供了行的日期差异,但我想考虑组内第一行的一年中的第一个日期
df1['date'] = pd.to_datetime(df1['date'])
df1['DateDiff'] = df1.groupby(['type','year']).date.diff().fillna(0)
我能够实现以下输出,这并不能解决我需要计算第一行值与一年中第一天的差异的要求。
type date year DateDiff
0 type1 2017-03-30 2017 0 days
1 type1 2017-05-10 2017 41 days
2 type1 2017-12-15 2017 219 days
3 type1 2018-01-15 2018 0 days
4 type1 2018-05-01 2018 106 days
5 type3 2018-01-30 2018 0 days
6 type3 2018-06-27 2018 148 days
7 type3 2019-03-20 2019 0 days
8 type3 2019-05-21 2019 62 days
想要的输出是:
type date year DateDiff
0 type1 2017-03-30 2017 88 days ---- (2017 - 01- 01) - (2017 - 03 - 30)
1 type1 2017-05-10 2017 41 days ---- (2017 - 03 - 30) - (2017-05-10)
2 type1 2017-12-15 2017 219 days
3 type1 2018-01-15 2018 14 days ---- (2018-01-01) - (2018-01-15)
4 type1 2018-05-01 2018 106 days
5 type3 2018-01-30 2018 29 days
6 type3 2018-06-27 2018 148 days
7 type3 2019-03-20 2019 78 days
8 type3 2019-05-21 2019 62 days
【问题讨论】:
-
如果您同意,请将答案标记为正确,如果有任何遗漏,请发表评论
标签: python dataframe datetime group-by