如何将数据表转换为Pivot Table或Matrix Table(无循环实现)
无循环实现数据表转透视表/矩阵表的方案
以下是几种无需循环的实现方式,覆盖Python、SQL和Excel工具场景:
1. Python Pandas 实现
利用Pandas内置的pivot方法直接完成转换,全程无需循环:
import pandas as pd # 构造源数据DataFrame source_data = [ ["8/4/2023", "Team 01", "S", 10], ["8/4/2023", "Team 02", "M", 20], ["8/4/2023", "Team 03", "L", 30], ["8/5/2023", "Team 01", "M", 40], ["8/5/2023", "Team 02", "M", 50] ] df = pd.DataFrame(source_data, columns=["Date", "TeamNo", "Size", "Qty"]) # 执行透视转换 pivot_result = df.pivot( index=["TeamNo", "Size"], columns="Date", values="Qty" ).reset_index() # 清理列名层级 pivot_result.columns.name = None # 输出结果(与目标结构一致) print(pivot_result)
转换后缺失的数值会自动填充为NaN,对应需求中的null。
2. SQL 实现(以MySQL为例)
通过条件聚合实现,无需循环逻辑:
SELECT TeamNo, Size, MAX(CASE WHEN Date = '8/4/2023' THEN Qty ELSE NULL END) AS `8/4/2023`, MAX(CASE WHEN Date = '8/5/2023' THEN Qty ELSE NULL END) AS `8/5/2023` FROM your_table_name GROUP BY TeamNo, Size ORDER BY TeamNo, Size DESC;
- 核心逻辑是按
TeamNo和Size分组,用CASE WHEN筛选对应日期的Qty值 MAX函数用于确保分组后仅保留唯一有效数值,缺失值自动填充NULL- 若日期是动态的,MySQL 8.0+可结合动态SQL生成列名
3. Excel 可视化操作实现
无需代码,用Excel内置透视表功能一键转换:
- 选中源数据区域,点击「插入」→「数据透视表」
- 将
TeamNo和Size拖到「行」区域 - 将
Date拖到「列」区域 - 将
Qty拖到「值」区域,值字段设置为「求和」(因单组仅一个值,求和等价于取数) - 调整行排序,即可得到与目标一致的矩阵表,缺失值自动显示为空
内容的提问来源于stack exchange,提问作者Danushka Fernando
相关产品推荐
相关产品推荐

