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

Pandas实现按参与者首条入组日期为起点计算对应周数列

实现步骤及代码

确认Date列已为datetime格式后,按ID分组取每个ID的最早日期作为入组基准,再基于日期间差计算周数即可,具体实现如下:

完整代码

import pandas as pd

# 示例数据构造
data = {'ID':['A','A','A','A','A', 'B','B','B','C','C','C','C'],
    'Date':['9/20/2021  4:34:57 AM', '9/21/2021  6:54:22 PM', '9/28/2021  5:54:22 PM', 
           '9/30/2021  6:54:22 PM', '10/5/2021  6:54:22 PM',
           '9/4/2021  7:04:38 PM','9/9/2021  7:04:38 PM','9/17/2021  7:04:38 PM',
           '9/28/2021  3:21:23 AM','9/30/2021  3:21:23 AM','10/05/2021  3:21:23 AM','10/15/2021  3:21:23 AM']}
    
df1 = pd.DataFrame(data)

# 1. 转换Date列为datetime格式(若已转换可跳过此步)
df1['Date'] = pd.to_datetime(df1['Date'])

# 2. 按ID分组计算周数:入组日为第0天,对应第1周,每满7天周数+1
df1['week_num'] = df1.groupby('ID')['Date'].transform(
    lambda x: ((x - x.min()).dt.days // 7) + 1
)

# 输出结果
print(df1)

逻辑说明

  • 用groupby('ID')['Date'].transform('min')获取每个ID对应的最早日期(即入组日)
  • 计算每条记录日期与入组日的差值,提取天数后做整数除法(//7)向下取整,再加1即可满足入组日(0天差)对应第1周的需求
  • 若需要保留中间计算结果(入组日、天数差),可拆分计算步骤:
# 拆分步骤写法
df1['enroll_date'] = df1.groupby('ID')['Date'].transform('min')
df1['days_since_enroll'] = (df1['Date'] - df1['enroll_date']).dt.days
df1['week_num'] = df1['days_since_enroll'] //7 +1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:05