基于日期条件添加周分类列:标记本周与累计项目
解决方案
你的问题出在两个地方:一是获取当前周数的方法错误,二是只对比周数会忽略跨年场景的误判。以下是正确的实现步骤:
1. 核心思路
要准确标记「本周项目」,需要同时对比日期所在的年份和周数(不同年份可能有相同的周数,比如2023年第52周和2024年第52周是完全不同的周),只有当数据中的日期年份、周数和当前日期完全匹配时,才标记为Weekly,否则为Cumulative。
2. 正确代码实现
import pandas as pd import numpy as np # 确保日期列是datetime格式(你的原有代码) df_site['RECEIVE DATE'] = pd.to_datetime(df_site['RECEIVE DATE']) # 获取当前日期的年份和周数 current_dt = pd.Timestamp.today() current_year, current_week = current_dt.isocalendar().year, current_dt.isocalendar().week # 生成分类标识 df_site['Report_Type'] = np.where( # 同时匹配年份和周数 (df_site['RECEIVE DATE'].dt.isocalendar().year == current_year) & (df_site['RECEIVE DATE'].dt.isocalendar().week == current_week), 'Weekly', 'Cumulative' )
3. 错误原因说明
你之前的代码df_site['RECEIVE DATE'].dt.isocalendar().today是无效写法:
dt.isocalendar()返回的是包含year/week/day的结构,并没有today方法,正确的做法是单独获取当前日期的年周信息。- 仅对比周数会导致跨年场景的错误标记,比如12月底的日期和次年1月初的日期,周数可能接近但属于不同年份,必须同时校验年份才能保证准确性。
内容的提问来源于stack exchange,提问作者Sultan
相关产品推荐
相关产品推荐

