按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实现
- 选中所有原始数据,插入数据透视表
- 按顺序把「Region」「Manager」「Employee Name」拖到行区域,在透视表设置里关闭分类汇总、取消重复项显示
- 把「Product ID Sold」拖到列区域,再拖一次到值区域,值汇总方式选「最大值」即可
- 按需调整透视表显示格式,就能得到你要的目标结构
内容的提问来源于stack exchange,提问作者user17099549
相关产品推荐
相关产品推荐

