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

按Region、Manager、Employee Name分组表格数据并展示组内所有售出Product ID

你目前有一套销售数据,需要按「区域(Region)」、「主管(Manager)」、「员工姓名(Employee Name)」三列进行分组,将每个分组下所有的售出产品ID横向展开展示,以下是不同常用工具下的实现方案:

实现方案

Python(Pandas)实现

import pandas as pd

# 请先将你的数据读入为DataFrame,变量名设为df
# 按三个维度分组,聚合对应所有产品ID为列表
grouped_df = df.groupby(['Region', 'Manager', 'Employee Name'], as_index=False)['Product ID Sold'].agg(list)
# 将产品ID列表拆分为多列
expand_df = pd.DataFrame(grouped_df['Product ID Sold'].tolist(), index=grouped_df.index)
# 合并分组维度和展开的产品ID列
result_df = pd.concat([grouped_df[['Region', 'Manager', 'Employee Name']], expand_df], axis=1)
# 可选:将重复的区域、主管字段置空,实现合并单元格的视觉效果
result_df['Region'] = result_df['Region'].mask(result_df['Region'].duplicated(), '')
result_df['Manager'] = result_df['Manager'].mask(result_df['Manager'].duplicated(), '')

SQL实现(以MySQL为例)

-- 先给每个员工名下的产品ID编排序号
WITH ranked_data AS (
    SELECT 
        Region, Manager, `Employee Name`, `Product ID Sold`,
        ROW_NUMBER() OVER(PARTITION BY Region, Manager, `Employee Name` ORDER BY `Product ID Sold`) AS row_num
    FROM 你的表名
)
-- 行转列把产品ID横向展开
SELECT 
    Region, Manager, `Employee Name`,
    MAX(IF(row_num=1, `Product ID Sold`, NULL)) AS `Product ID 1`,
    MAX(IF(row_num=2, `Product ID Sold`, NULL)) AS `Product ID 2`,
    MAX(IF(row_num=3, `Product ID Sold`, NULL)) AS `Product ID 3`,
    MAX(IF(row_num=4, `Product ID Sold`, NULL)) AS `Product ID 4`,
    MAX(IF(row_num=5, `Product ID Sold`, NULL)) AS `Product ID 5`
FROM ranked_data
GROUP BY Region, Manager, `Employee Name`
ORDER BY Region, Manager, `Employee Name`;

Excel实现

  1. 选中所有原始数据,插入数据透视表
  2. 按顺序把「Region」「Manager」「Employee Name」拖到行区域,在透视表设置里关闭分类汇总、取消重复项显示
  3. 把「Product ID Sold」拖到列区域,再拖一次到值区域,值汇总方式选「最大值」即可
  4. 按需调整透视表显示格式,就能得到你要的目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:27:03