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

Pandas中按用户分组聚合数据并计算日期差值的需求

计算每个用户相对于最早日期的日期差值(Pandas实现)

没问题,我来帮你搞定这个需求!首先先修正下你代码里的小笔误——pd.Dataframe应该是pd.DataFrame(注意字母F是大写),不然运行时会抛出AttributeError哦。

接下来我们一步步实现目标,核心思路是按用户分组,找到每个用户的最早日期,再用每条记录的日期减去这个最早日期得到差值:

步骤1:修正并创建DataFrame,转换日期列类型

首先把原始的字符串日期转成Pandas的datetime类型,这样才能进行时间运算:

import pandas as pd

# 修正拼写错误:pd.DataFrame
d = {'User': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'], 
     'Date' : ['2017-10-21', '2017-10-24', '2017-10-29', '2017-09-30', '2017-10-23', '2017-10-31', '2017-11-02', '2017-11-03', '2017-11-03']}
df = pd.DataFrame(data=d)

# 把Date列转为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

步骤2:计算每个用户的最早日期并匹配到每一行

用groupby+transform方法,这样可以把每个用户的最小日期(最早日期)自动对应到该用户的每一条记录上,不用额外做合并操作:

# 新增列存储每个用户的最早日期
df['First_Date'] = df.groupby('User')['Date'].transform('min')

步骤3:计算日期差值,新增结果列

直接用每条记录的Date减去对应的First_Date,如果想要得到整数天数,可以用.dt.days提取Timedelta对象的天数部分:

# 计算天数差值,新增列Days_Since_First
df['Days_Since_First'] = (df['Date'] - df['First_Date']).dt.days

最终结果

运行完上面的代码后,你的DataFrame会变成这样:

UserDateFirst_DateDays_Since_First
A2017-10-212017-10-210
A2017-10-242017-10-213
A2017-10-292017-10-218
B2017-09-302017-09-300
B2017-10-232017-09-3023
C2017-10-312017-10-310
C2017-11-022017-10-312
C2017-11-032017-10-313
C2017-11-032017-10-313

如果你不需要保留First_Date列,可以直接把步骤2和3合并成一行,更简洁:

df['Days_Since_First'] = (df['Date'] - df.groupby('User')['Date'].transform('min')).dt.days

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:15:08