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

Pandas多层索引DataFrame添加计算指标:每周每订单商品数量统计

你出现列层级重复的核心原因是:分组时先指定了选取order_id、product_id两列,后续聚合时又用了以这两个字段名为键的字典,导致列名重复嵌套了两层。

以下是完整实现代码:

import pandas as pd

# 第一步:确保date列为时间格式,避免重采样报错
df['date'] = pd.to_datetime(df['date'])

# 第二步:按维度分组、按周重采样聚合
temp = (
    df.set_index('date')
    .groupby(['category', 'subcategory'])
    .resample('W-MON', label='left')
    # 直接指定聚合后的列名,避免层级重复
    .agg(
        order_id=('order_id', 'nunique'),
        product_id=('product_id', 'count')
    )
    .reset_index()
)

# 第三步:计算product_per_order,内置除0异常处理:订单数为0时直接返回0
temp['product_per_order'] = temp.apply(
    lambda x: x['product_id'] / x['order_id'] if x['order_id'] != 0 else 0,
    axis=1
)

# 第四步:转换为你需要的宽表结构,日期作为最上层列
final_df = temp.pivot(
    index=['category', 'subcategory'],
    columns='date',
    values=['order_id', 'product_id', 'product_per_order']
# 交换列层级,把日期放到最上层,再按日期顺序排序
).swaplevel(axis=1).sort_index(axis=1).fillna(0)

最终输出的final_df列结构为第一层级是周维度日期,第二层级是order_id、product_id、product_per_order三个指标,完全匹配你需要的结构,无数据的维度组合默认填充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.28 02:24:03