如何在Pivot Table中处理多值字段并生成统计透视表
如何在Pivot Table中处理多值字段并生成统计透视表
嘿,我明白你的需求啦——就是要把那种带分号分隔多值的Workstream字段,转换成按Client统计每个Workstream出现次数的透视表对吧?我给你整理了两种常用的解决方法,不管是用Excel可视化操作还是代码批量处理都能搞定~
首先先明确你的原始数据和目标结果:
原始数据
| Client | Workstream | Project |
|---|---|---|
| Alpha | a; b; c | A |
| Beta | a; d; e | B |
| Gamma | b; c; e | C |
| Alpha | d | D |
| Beta | a; c; e | E |
目标透视表(补充完整缺失值)
| Client | a | b | c | d | e |
|---|---|---|---|---|---|
| Alpha | 1 | 1 | 1 | 1 | 0 |
| Beta | 2 | 0 | 1 | 1 | 2 |
| Gamma | 0 | 1 | 1 | 0 | 1 |
方法一:用Excel可视化操作处理
核心是先把Workstream的多值拆成单独的行,再做透视统计:
- 第一步:用Power Query拆分多行(比手动分列高效太多)
- 选中你的整个数据区域,点击顶部菜单栏的「数据」>「从表格/区域」,确认数据有表头后导入Power Query编辑器
- 在编辑器里选中「Workstream」列,点击「转换」>「拆分列」>「按分隔符」,选择分号作为分隔符,然后拆分方式选「拆分为行」——这一步会把每个分号分隔的值单独拆成一行,比如Alpha会变成4行(对应a、b、c、d)
- 点击「关闭并上载」,把拆分后的数据导出到新的工作表
- 第二步:制作透视表
- 选中拆分后的表格,点击「插入」>「透视表」,选择合适的放置位置
- 在透视表字段面板里:
- 把「Client」拖到「行」区域
- 把拆分后的「Workstream」拖到「列」区域
- 再把「Workstream」拖到「值」区域,然后点击值字段的下拉菜单,选择「值字段设置」,把汇总方式改成「计数」
- 最后把透视表里的空白单元格替换成0,就完美得到你要的结果啦
方法二:用Python Pandas代码处理
如果习惯用代码批量处理,pandas可以一键搞定:
import pandas as pd # 构造原始数据(实际使用时可通过pd.read_csv/pd.read_excel读取本地文件) df = pd.DataFrame({ 'Client': ['Alpha', 'Beta', 'Gamma', 'Alpha', 'Beta'], 'Workstream': ['a; b; c', 'a; d; e', 'b; c; e', 'd', 'a; c; e'], 'Project': ['A', 'B', 'C', 'D', 'E'] }) # 拆分Workstream字段为多行,注意分号后有空格,所以分隔符用'; ' df_split = df.assign(Workstream=df['Workstream'].str.split('; ')).explode('Workstream') # 生成透视表,按Client分组、Workstream列分组统计数量,空值填充为0 pivot_result = pd.pivot_table(df_split, index='Client', columns='Workstream', aggfunc='size', fill_value=0) # 打印结果 print(pivot_result)
运行这段代码后,输出的结果就是你想要的透视表格式,直接导出成Excel也完全没问题~
备注:内容来源于stack exchange,提问作者D. Antony




