Python按ID分组根据日期计算自增周序号及年周数实现问题
解法说明
1. 修正周数(Week_of_Year)计算
你当前使用的dt.week默认以周一作为一周起始,不符合要求的周日为起始规则,替换为以下代码即可:
df['Week_of_Year'] = df['Date_time'].dt.strftime('%U').astype(int)
Python的strftime格式符%U本身就以周日作为每一周的第一天,计算出的周数完全符合你的需求。
2. 按ID分组计算自增周序号(Week_Number)
你原有代码的问题在于分组逻辑错误:你按全局周维度分组,没有按ID分组,也没有生成组内自增序号的逻辑。正确实现如下:
- 首先确保每个ID下的日期按升序排列(如果你的数据已经按ID+日期排序可跳过这步)
df = df.sort_values(['ID', 'Date_time']).reset_index(drop=True)
- 按ID分组后用
cumcount生成组内自增序号,加1即可得到从1开始的周序号:
df['Week_Number'] = df.groupby('ID').cumcount() + 1
以上代码运行后即可得到你给出的预期输出效果。
内容的提问来源于stack exchange,提问作者shockwave
相关产品推荐
相关产品推荐

