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

为Pandas DataFrame中各日期添加相对月份的周数列

Pandas 按每月日期区间新增周数列

问题描述

现有如下Pandas DataFrame:

dateother_columns
2022-02-06row
2022-02-07row
2022-02-08row
2022-02-15row
2022-02-24row
2022-02-28row

需要新增week列,按每月日期的固定区间分配周数(不使用datetime.week功能),规则如下:

  • 1-7日 → 第1周(格式:1 week)
  • 8-14日 → 第2周(格式:2 week)
  • 15-21日 → 第3周(格式:3 week)
  • 22-28日 → 第4周(格式:4 week)
  • 29-31日 → 第5周(格式:5 week)

解决方案

方案一:严格匹配区间规则

通过整数除法直接计算周数,逻辑简洁高效,完全符合区间规则:

import pandas as pd

# 构建示例数据
data = {
    'date': ['2022-02-06', '2022-02-07', '2022-02-08', '2022-02-15', '2022-02-24', '2022-02-28'],
    'other_columns': ['row'] * 6
}
df = pd.DataFrame(data)

# 将date列转换为datetime类型(若原始数据未转换)
df['date'] = pd.to_datetime(df['date'])

# 计算周数并格式化
# (day - 1) // 7 实现区间分组:1-7→0,8-14→1,…,29-31→4,加1后得到周数
df['week'] = (df['date'].dt.day - 1) // 7 + 1
df['week'] = df['week'].astype(str) + ' week'

print(df)

运行后结果:

dateother_columnsweek
2022-02-06row1 week
2022-02-07row1 week
2022-02-08row2 week
2022-02-15row3 week
2022-02-24row4 week
2022-02-28row4 week

方案二:匹配示例中28日为第5周的情况

若需要将每月28-31日统一归为第5周(与你提供的示例结果一致),可使用pd.cut自定义区间:

import pandas as pd

data = {
    'date': ['2022-02-06', '2022-02-07', '2022-02-08', '2022-02-15', '2022-02-24', '2022-02-28'],
    'other_columns': ['row'] * 6
}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date'])

# 自定义区间和标签,将28-31日归为第5周
df['week'] = pd.cut(
    df['date'].dt.day,
    bins=[0, 7, 14, 21, 28, 31],
    labels=['1 week', '2 week', '3 week', '4 week', '5 week'],
    include_lowest=True
)

print(df)

运行后结果:

dateother_columnsweek
2022-02-06row1 week
2022-02-07row1 week
2022-02-08row2 week
2022-02-15row3 week
2022-02-24row4 week
2022-02-28row5 week

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:30:55