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

基于Pandas按ID计算自初始日期起的天数演变(无循环实现,适配大数据集)

解决方案:Pandas无循环计算ID内日期演变天数

先直接给你一套高效的实现方案,全程不用任何循环,完美适配大规模数据集:

步骤1:构造原始数据并转换日期格式

首先把你的数据转成Pandas DataFrame,同时把字符串日期转换成可计算的日期类型:

import pandas as pd

# 加载原始数据
data = {
    'ID': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
    'Date': ['01/01/2020', '05/01/2020', '08/01/2020', '10/01/2020',
             '05/05/2020', '08/05/2020', '12/05/2020', '08/08/2020', '22/08/2020']
}
df = pd.DataFrame(data)

# 将字符串日期转为Pandas日期类型(按日/月/年格式解析)
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

步骤2:按ID匹配初始日期

用groupby+transform组合,为每条记录自动匹配对应ID的最早日期,这一步是核心,完全矢量化操作:

# 为每个ID的所有记录添加其初始日期列
df['Initial_Date'] = df.groupby('ID')['Date'].transform('min')

步骤3:计算天数演变并整理结果

直接做日期差运算,提取天数后加1(匹配你预期的初始日期计为1天的规则):

# 计算天数差并调整为你的预期格式
df['Days Evolved Since Initial date'] = (df['Date'] - df['Initial_Date']).dt.days + 1

# 整理成目标输出格式(去掉中间辅助列,转回原始日期字符串格式)
result = df[['ID', 'Date', 'Days Evolved Since Initial date']]
result['Date'] = result['Date'].dt.strftime('%d/%m/%Y')

print(result)

最终输出结果

运行后会得到和你预期完全一致的表格:

IDDateDays Evolved Since Initial date
a01/01/20201
a05/01/20204
a08/01/20207
a10/01/20209
b05/05/20201
b08/05/20203
b12/05/20207
c08/08/20201
c22/08/202014

关键优势说明

  • 全程用Pandas的矢量化分组操作,没有任何循环,处理百万级数据集也不会有性能问题
  • transform方法的作用是把分组计算的结果广播到每一行,确保每条记录都能对应到自己ID的初始日期
  • 日期格式转换和调整完全贴合你的原始数据和输出要求

内容的提问来源于stack exchange,提问作者rickhtv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:37:34