如何将长表转换为指定结构的宽表(Pandas与Excel实现)
长表转指定宽表的实现方案(Pandas + Excel)
Pandas 实现
代码示例
import pandas as pd # 构造原始长表数据(实际使用时可替换为 pd.read_csv/ExcelFile 读取外部数据) raw_data = { 'Program': ['N', 'N', 'N', 'Y', 'Y', 'Y'], 'Seg': ['A', 'B', 'C', 'A', 'B', 'C'], 'Percent': ['1%', '13%', '4%', '6%', '5%', '8%'] } df = pd.DataFrame(raw_data) # 核心转换逻辑:将 Seg、Program 设置为多级列索引,值为 Percent wide_df = df.set_index(['Seg', 'Program'])['Percent'].unstack([0, 1]) # 将行索引命名为 Percent,匹配目标结构 wide_df.index = ['Percent'] # 查看转换结果 print(wide_df)
常用数据选取操作
- 选取所有 Seg 为 A 的数据:
wide_df['A'] - 选取所有 Program 为 N 的数据:
wide_df.loc[:, (slice(None), 'N')] - 选取 Seg 为 B 且 Program 为 Y 的数据:
wide_df['B']['Y']
Excel 实现
方法一:数据透视表(推荐)
- 选中原始数据的全部区域,点击「插入」选项卡 → 「数据透视表」,选择透视表放置位置(新工作表或空白区域均可)。
- 在右侧「数据透视表字段」面板中:
- 把「Seg」拖到「列」区域
- 把「Program」拖到「列」区域(放在「Seg」下方,形成多级列标题)
- 把「Percent」拖到「值」区域,右键值字段 → 「值字段设置」,选择「最大值」或「最小值」(因每个 Seg+Program 组合唯一,结果完全一致)
- 调整布局:点击「数据透视表工具-设计」→「报表布局」→「以表格形式显示」,将行标签的空白单元格改为「Percent」,即可得到目标结构。
方法二:XLOOKUP 函数(手动构造)
假设原始数据在 A7:C12 区域:
- 在空白区域第一行(如 A1:F1)输入 Seg 值:
A, A, B, B, C, C - 在第二行(A2:F2)输入对应 Program 值:
N, Y, N, Y, N, Y - 在第三行 A3 单元格输入公式:
=XLOOKUP(1, ($A$7:$A$12=A1)*($B$7:$B$12=A2), $C$7:$C$12) - 向右填充公式至 F3,即可自动匹配出对应 Percent 值。
内容的提问来源于stack exchange,提问作者mah65
相关产品推荐
相关产品推荐

