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

在Pandas DataFrame中按user_id计算距首次出现的累计天数

最高效实现方案

核心采用Pandas原生向量化操作实现,无Python层循环,千万级数据量下也可快速执行。


前置操作:转换日期列格式

首先确保date列是Pandas datetime类型,否则无法执行日期运算:

import pandas as pd

# format参数可根据实际日期格式调整,能大幅提升转换速度
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

核心计算逻辑

通过groupby按user_id分组,搭配transform返回和原数据长度一致的每组最小日期(即用户首次出现日期),直接做日期差后提取天数即可:

df['days_since_first_occurence'] = (df['date'] - df.groupby('user_id')['date'].transform('min')).dt.days

效果验证

输入示例

user_iddate
user12023-01-01
user12023-01-03
user12023-01-10
user22023-02-05
user22023-02-05
user22023-02-10

输出结果

user_iddatedays_since_first_occurence
user12023-01-010
user12023-01-032
user12023-01-109
user22023-02-050
user22023-02-050
user22023-02-105

性能说明

  • 全程调用Pandas底层C实现的运算逻辑,时间复杂度为O(n)
  • 比逐组apply的写法速度快5~10倍,数据量越大性能优势越明显
  • 若数据已提前按user_id+date排序,也可采用groupby+diff累加的写法,性能与上述方案一致,但可读性略差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:18:04