You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:31:11