如何计算DataFrame中排序后提交日期与最早日期的间隔天数?
计算DataFrame中日期与全局最早日期的间隔天数
原始DataFrame
Path_Version commitdates Year-Month API Age api_spec_id 168 NaN 2018-10-19 2018-10 39 521 169 NaN 2018-10-19 2018-10 39 521 170 NaN 2018-10-12 2018-10 39 521 171 NaN 2018-10-12 2018-10 39 521 172 NaN 2018-10-12 2018-10 39 521 173 NaN 2018-10-11 2018-10 39 521 174 NaN 2018-10-11 2018-10 39 521 175 NaN 2018-10-11 2018-10 39 521 176 NaN 2018-10-11 2018-10 39 521 177 NaN 2018-10-11 2018-10 39 521 178 NaN 2018-09-26 2018-09 39 521 179 NaN 2018-09-25 2018-09 39 521
需求目标
先对commitdates排序,然后计算每条记录的提交日期与整个数据集最早提交日期的间隔天数,得到如下结果:
Path_Version commitdates Year-Month API Age api_spec_id Days_difference 168 NaN 2018-10-19 2018-10 39 521 25 169 NaN 2018-10-19 2018-10 39 521 25 170 NaN 2018-10-12 2018-10 39 521 18 171 NaN 2018-10-12 2018-10 39 521 18 172 NaN 2018-10-12 2018-10 39 521 18 173 NaN 2018-10-11 2018-10 39 521 16 174 NaN 2018-10-11 2018-10 39 521 16 175 NaN 2018-10-11 2018-10 39 521 16 176 NaN 2018-10-11 2018-10 39 521 16 177 NaN 2018-10-11 2018-10 39 521 16 178 NaN 2018-09-26 2018-09 39 521 1 179 NaN 2018-09-25 2018-09 39 521 0
原代码问题分析
你之前尝试的分组排序+diff方法得到全0结果的原因:
groupby('api_spec_id')['commitdates'].diff()计算的是分组内相邻行的日期差值,并非与全局最早日期的差值- 分组后排序赋值会导致索引错位,进一步引发计算异常
正确实现代码
步骤1:确保日期列为datetime类型
如果commitdates尚未转换为datetime格式,先执行转换:
import pandas as pd final_api['commitdates'] = pd.to_datetime(final_api['commitdates'])
步骤2:计算与全局最早日期的间隔天数
直接获取整个数据集的最早日期,逐行计算差值并转换为天数:
# 获取全局最早提交日期 earliest_date = final_api['commitdates'].min() # 计算间隔天数 final_api['Days_difference'] = (final_api['commitdates'] - earliest_date).dt.days
步骤3:(可选)按commitdates排序
如果需要和目标结果一致,按日期从晚到早排序:
final_api = final_api.sort_values('commitdates', ascending=False).reset_index(drop=False)
执行以上代码后即可得到需求结果。
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

