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

在Jupyter Notebook中设置Pivot Table实现多维度索引及门店销量求和

搞定多维度门店订单汇总与透视表索引调整

嘿,我来帮你解决这个pandas透视表的问题!先理清楚你的需求:要按STYLE(款号)、COLOR(颜色)、SIZE(尺码)三个维度,汇总每个门店的订单总数量,同时还要把原来的门店列(比如Store16、Store20这类)变成索引的一部分,而不是放在透视表的列上。

先明确数据结构前提

我假设你的原始数据df是这样的宽格式:每行对应一组STYLE-COLOR-SIZE,列是各个门店的订单数量,比如:

STYLECOLORSIZEStore16Store20Store25
S001RedM1053
S001RedL842
S002BlueS1576

如果你的数据是这种结构,那咱们分两步走就能实现需求:


方法1:用melt转长格式 + pivot_table构建多层索引

第一步:把宽表转成窄表

原来的门店是列名,咱们得把它们转成数据里的一个字段,这样才能把它加入索引:

# 将STYLE/COLOR/SIZE保留为标识字段,把所有门店列转成"门店"字段,对应数量转成"订单数量"
melted_df = df.melt(
    id_vars=['STYLE', 'COLOR', 'SIZE'],
    var_name='门店',
    value_name='订单数量'
)

转完之后,数据就变成了每行对应STYLE-COLOR-SIZE-门店的组合,看起来像这样:

STYLECOLORSIZE门店订单数量
S001RedMStore1610
S001RedMStore205
S001RedMStore253

第二步:构建带多层索引的透视表

现在就可以把STYLE、COLOR、SIZE、门店都设为索引,汇总订单数量:

result = pd.pivot_table(
    melted_df,
    index=['STYLE', 'COLOR', 'SIZE', '门店'],  # 把门店加入索引,成为索引的一部分
    values='订单数量',
    aggfunc='sum'  # 按维度求和
)

方法2:用groupby更简洁实现

如果不需要透视表的额外功能(比如处理缺失值、多聚合函数),直接用groupby会更简单:

# 先转长表,再按四个维度分组求和
# 如果要保留多层索引,就去掉最后的reset_index()
result = df.melt(
    id_vars=['STYLE', 'COLOR', 'SIZE'],
    var_name='门店',
    value_name='订单数量'
).groupby(['STYLE', 'COLOR', 'SIZE', '门店'])['订单数量'].sum().reset_index()

为什么你的初始代码没达到效果?

你原来写的df1 = pd.pivot_table(df, values=['Store16','...')是把门店列作为values,这样透视表会把门店放在列的位置,而不是索引里。咱们先转成窄表,就是为了把门店从“列名”变成“数据字段”,这样才能把它纳入索引体系,满足你“原列字段成为索引一部分”的需求。


最终示例结果

运行完上面的代码,你会得到这样的结果(多层索引版):

订单数量
STYLE COLOR SIZE 门店       
S001  Red   M    Store16  10
                 Store20   5
                 Store25   3
            L    Store16   8
                 Store20   4
                 Store25   2
S002  Blue  S    Store16  15
                 Store20   7
                 Store25   6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:39:23