如何在Pandas中自定义10月1日为起始日期计算对应周数
Pandas自定义起始日期计算周数解决方案
实现步骤
- 首先导入依赖库
import pandas as pd import datetime
- 合并年月日三列为标准日期列
假设你的数据框名为df,存储日、月、年的列名分别为day、month、year,直接用pandas内置方法批量转换:
df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
- 定义周数计算的基准起始日期
将你要求的起始10月1日替换为实际对应的年份即可,示例为2023年10月1日:
start_date = datetime.date(2023, 10, 1)
- 批量计算周数并赋值给新列
直接通过日期差值计算,无需手动写循环,自动生成week_num新列:
# 计算当前日期和基准日期的天数差,除以7向下取整后+1,保证10月1日所在周为第1周 df['week_num'] = ((df['date'] - pd.to_datetime(start_date)).dt.days // 7) + 1
特殊场景适配
如果你需要按财年计算,每年的10月1日都作为当年的周数起始点,用以下代码动态计算每行的基准起始日期即可:
def get_fiscal_week(row): # 月份>=10则财年起始为当年10月1日,否则为上一年10月1日 if row['month'] >= 10: fiscal_start = datetime.date(row['year'], 10, 1) else: fiscal_start = datetime.date(row['year'] - 1, 10, 1) delta_days = (datetime.date(row['year'], row['month'], row['day']) - fiscal_start).days return (delta_days // 7) + 1 df['week_num'] = df.apply(get_fiscal_week, axis=1)
原代码问题说明
- 你之前用的
strftime("%U")是Python内置的标准周数计算规则,默认以每年1月1日所在周为第1周,无法适配自定义起始日期的需求 - 无需手动写zip循环遍历取值,pandas向量化操作效率远高于手动循环,且可以直接赋值给数据框新列,不需要额外处理输出结果
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

