如何在Pandas中将Datetime转为符合pd.grouper(freq='W')格式的周日期(无需Grouper)
如何将Datetime转换为与pd.Grouper(freq='W')一致的周日期
你可以直接使用pandas的dt.floor('W')方法实现,这和pd.Grouper(freq='W')默认的周周期(每周日为周期结束,周标签为该周日)完全匹配。
实现步骤
- 确保日期列是
datetime64类型(若不是,先用pd.to_datetime()转换) - 调用
dt.floor('W')对日期向下取整,得到对应周的周日日期,这就是pd.Grouper(freq='W')分组时使用的标签值。
代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'date': ['2022-03-10', '2022-03-15', '2022-03-21']}) # 转换为datetime类型 df['date'] = pd.to_datetime(df['date']) # 生成与pd.Grouper(freq='W')一致的周日期 df['week_date'] = df['date'].dt.floor('W') print(df)
输出结果
date week_date 0 2022-03-10 2022-03-06 1 2022-03-15 2022-03-13 2 2022-03-21 2022-03-20
替代手动计算方法
如果想手动实现逻辑,可通过日期的星期数计算:
# 周日的weekday值为6,非周日日期减去(weekday +1)天得到上一个周日 df['week_date'] = df['date'] - pd.to_timedelta(df['date'].dt.weekday + 1, unit='D')
该方法与dt.floor('W')结果完全一致,但前者更简洁高效。
内容的提问来源于stack exchange,提问作者titutubs
相关产品推荐
相关产品推荐

