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

Pandas如何通过带过滤的自关联实现长表转按店铺分列的周度销售宽表

实现方案

你要做的是分组聚合后宽表转换,用pivot或者多级索引unstack的方式比循环merge更简单稳定,完整实现代码如下:

import pandas as pd

# 1. 先确保day列为datetime格式(如果已经是可以跳过这步)
df['day'] = pd.to_datetime(df['day'])

# 2. 按周、type、store分组,对销售额和订单量求和
df_grouped = df.groupby(
    [pd.Grouper(key='day', freq='W-MON', label='right'),
     'type',
     'store']
)[['sales', 'orders']].sum().reset_index()

# 3. 透视生成宽表,缺失值填充为0
df_res = df_grouped.pivot(
    index=['day', 'type'],
    columns='store',
    values=['sales', 'orders']
).fillna(0).astype(int) # 匹配示例的整数输出格式

# 4. 拼接列名,把两级列名合并成「指标_店铺」格式
df_res.columns = [f'{col[0]}_{col[1]}' for col in df_res.columns]

# 5. 重置索引把day和type变回普通列
df_res = df_res.reset_index()

最终得到的df_res完全符合你需要的输出结构。

原有代码的问题
  • 循环merge时suffixes参数设置错误,两个后缀写了相同值,会导致列名冲突混乱
  • 每次merge的子分组结果里都带store列,多次outer join后会生成大量冗余的store_x、store_y列
  • 店铺列表里重复写了两次apple,会重复合并apple的数据,导致结果异常
  • 多次outer join后缺失值不会自动填充为0,需要额外处理

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:18:04