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

如何为DataFrame创建按用户首日期计算的自定义周数新列

实现方案

首先确保Date列转换为pandas的datetime格式,再按用户分组获取每个用户的最早出现日期,根据间隔天数换算为周数即可。

步骤1:数据预处理

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Date': ['2019-08-05', '2019-07-01', '2019-08-13', '2019-08-20', '2019-09-24'],
    'User': ['Bob', 'Chris', 'Bob', 'Chris', 'Bob']
})

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

步骤2:计算自定义周数

方案A:满7天算一周(地板除)

# 分组获取每个用户的首次出现日期
df['first_date'] = df.groupby('User')['Date'].transform('min')
# 间隔天数除以7取整,加1将首日标记为第1周
df['Week_number'] = ((df['Date'] - df['first_date']).dt.days // 7) + 1
# 删除临时列
df.drop('first_date', axis=1, inplace=True)

方案B:不满7天也算一周(向上取整,和你给出的全量示例输出完全匹配)

如果规则是只要跨了7天周期就算下一周,替换周数计算逻辑即可:

df['first_date'] = df.groupby('User')['Date'].transform('min')
df['Week_number'] = ((df['Date'] - df['first_date']).dt.days / 7).apply(np.ceil).astype(int)
df.drop('first_date', axis=1, inplace=True)

最终输出

方案B运行后得到的结果和你预期的完全一致:

DateUserWeek_number
2019-08-05Bob1
2019-07-01Chris1
2019-08-13Bob2
2019-08-20Chris9
2019-09-24Bob8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:05