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

Python如何将含分类、数值列的日度数据转换为周/月度数据

Python实现日度数据转周/月度聚合方案

适用场景:

  • 数据集包含日期列、分类列、数值列三类字段
  • 同一聚合周期(周/月)内同维度的分类列取值基本固定
  • 聚合需求:按时间维度聚合后保留分类列原值,数值列执行求和计算

日度数据示例

实现步骤

核心逻辑:用pandas的resample方法做时间维度聚合,对取值固定的分类列取组内第一个值即可,不需要额外做复杂映射,数值列直接求和。

  1. 预处理时间字段
    首先导入pandas库,读取数据后将日期列转换为标准时间格式,这是时间聚合的必要前提:
import pandas as pd

# 替换为你的数据读取逻辑,支持csv、excel等格式
df = pd.read_csv("your_daily_data_path.csv")
# 替换date_col为你数据集中实际的日期列名
df["date_col"] = pd.to_datetime(df["date_col"])
  1. 配置聚合规则
    两种配置方式可选,根据自己的数据集情况选就行:
  • 手动指定列规则(适合列数少、字段明确的场景)
# 以下列名替换为你数据集的实际字段名
agg_config = {
    "category_a": "first", # 分类列取组内第一个值,同组值一致时结果准确
    "category_b": "first",
    "sales": "sum", # 数值列求和
    "visitor": "sum"
}

# 月度聚合,M代表按自然月(月末为统计节点)聚合
df_monthly = df.set_index("date_col").resample("M").agg(agg_config).reset_index()

# 周度聚合只要把resample的参数换成W即可,默认周日为周起始
# df_weekly = df.set_index("date_col").resample("W").agg(agg_config).reset_index()
  • 自动识别列类型生成规则(适合列数多、不想手动配置的场景)
agg_config = {}
for col in df.columns:
    if col == "date_col": # 跳过日期列
        continue
    # 识别分类/文本类型列,取组内第一个值
    if pd.api.types.is_object_dtype(df[col]) or pd.api.types.is_categorical_dtype(df[col]):
        agg_config[col] = "first"
    # 识别数值类型列,执行求和
    elif pd.api.types.is_numeric_dtype(df[col]):
        agg_config[col] = "sum"

# 执行月度聚合
df_monthly = df.set_index("date_col").resample("M").agg(agg_config).reset_index()

注意事项

  • 如果担心个别日期的分类列存在异常值、同组取值不完全一致,可以把分类列的聚合规则从first换成lambda x: x.mode()[0],取组内众数,容错性更高
  • 可以根据业务需求调整resample的时间频率参数:MS代表按月初为节点聚合,W-MON代表按周一为周起始聚合
  • 聚合完成后可以根据需要把日期列格式化为%Y-%m的月度字符串格式,方便后续匹配其他数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:57:28