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

如何用Pandas将门店周销售长表按店品组合转换为多周销量宽表

Pandas 原生实现周度销售数据宽表转换

核心采用pivot_table算子实现,逻辑和PySpark的pivot算子完全对齐,后续迁移Spark成本极低,性能远高于纯Python字典实现。

核心实现代码

import pandas as pd

# 原始长表DataFrame命名为df_sales
wide_df = df_sales.pivot_table(
    index=["store_id", "item_id"],
    columns="week",
    values="sales",
    fill_value=0,
    # 无重复(store,item,week)记录时可替换为"first"提升运行速度
    aggfunc="sum"
).reset_index()

# 按要求重命名列名
wide_df.columns = [
    col if col in ("store_id", "item_id") else f"sales_week_{col}"
    for col in wide_df.columns
]

方案优势

  • 全Pandas原生API实现,无自定义循环逻辑,百万级数据处理速度比纯Python字典实现快10倍以上
  • 内置fill_value参数直接完成缺失记录补0,无需额外调用fillna
  • 聚合逻辑和Spark的groupBy("store_id","item_id").pivot("week").sum("sales")完全对齐,后续迁移到PySpark仅需调整语法,核心逻辑无需重构

可选优化

如果周度维度数量过多,可提前筛选需要的周次再做转换,降低内存占用:

# 示例:仅保留2024年第1-12周的数据做转换
valid_weeks = list(range(202401, 202413))
filtered_sales = df_sales[df_sales["week"].isin(valid_weeks)]
# 后续对filtered_sales执行pivot操作即可

效果示例

原始长表样例

store_iditem_idweeksales
1101120
1101215
1102130
2101225

转换后宽表样例

store_iditem_idsales_week_1sales_week_2
11012015
1102300
2101025

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:00