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

Pandas按订单号分组统计产品/颜色分类计数的优化方案问询

解决方案

你不需要手动定义每个分类项的聚合规则,用批量处理的逻辑即可适配动态分类的场景,以下两种实现都可以达到目标:

方案1:独热编码批量聚合(和你现有思路一致,优化后无需手动写列名)

import pandas as pd
# 你的示例数据
df = pd.DataFrame({'Product': ['X','X','Y','X','Y','W','W','Z','W','X'],
                   'Order #': ['01','01','02','03','03','03','04','05','05','05'],
                   'Price': [100,100,650,50,700,3000,2500,10,2500,150],
                   'Color': ['RED','BLUE','RED','RED','BLUE','GREEN','RED','BLUE','BLUE','GREEN']})

# 1. 计算订单基础统计字段
base_stats = df.groupby('Order #').agg(
    Product_Quant=('Product', 'count'),
    Total_Price=('Price', 'sum')
).reset_index()

# 2. 批量处理需要统计分类计数的字段
stat_config = {
    'Product': '{} total',  # 产品列的命名规则
    'Color': 'Color {}'     # 颜色列的命名规则
}
category_stats = []
for col, name_format in stat_config.items():
    # 单字段独热编码+按订单求和+重命名
    dummy_stat = pd.get_dummies(df[col])\
        .groupby(df['Order #']).sum()\
        .rename(columns=lambda x: name_format.format(x))
    category_stats.append(dummy_stat)

# 3. 合并所有统计结果
final_result = base_stats.join(pd.concat(category_stats, axis=1), on='Order #')

方案2:pivot_table实现(你之前没调试成功的写法参考)

核心是用aggfunc='size'统计出现次数,fill_value=0补全空值:

# 产品分类统计
product_stat = df.pivot_table(
    index='Order #', 
    columns='Product', 
    aggfunc='size', 
    fill_value=0
).rename(columns=lambda x: f'{x} total')

# 颜色分类统计
color_stat = df.pivot_table(
    index='Order #', 
    columns='Color', 
    aggfunc='size', 
    fill_value=0
).rename(columns=lambda x: f'Color {x}')

# 合并基础统计和分类统计
final_result = base_stats.join([product_stat, color_stat], on='Order #')

两种方案都会自动适配所有分类取值,即使后续产品、颜色新增分类项,也不需要修改代码逻辑,直接运行就能生成对应统计列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:07