如何将表格Item列条目转为新列并统计各人员对应物品持有数量
长表转宽表操作方案
你要实现的是典型的长表转宽表(透视表/交叉表转换)操作,不同工具的实现方法如下:
数据示例
原始表结构
| Person | Item | quantity |
|---|---|---|
| Alan | Car | 1 |
| Alan | Boat | 2 |
| Brad | Car | 3 |
| Brad | Boat | 2 |
| Charles | Boat | 3 |
预期转换后结构
| Person | Car | Boat |
|---|---|---|
| Alan | 1 | 2 |
| Brad | 3 | 2 |
| Charles | 0 | 3 |
各工具实现方法
1. Excel/WPS表格
直接使用数据透视表功能即可:
- 选中整张原始数据表,点击「插入」选项卡→「数据透视表」
- 行区域拖拽添加
Person字段 - 列区域拖拽添加
Item字段 - 值区域拖拽添加
quantity字段,值汇总方式选择「求和」,空值可手动设置填充为0
2. Python(pandas库)
使用pandas的pivot_table方法实现,代码如下:
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Person': ['Alan', 'Alan', 'Brad', 'Brad', 'Charles'], 'Item': ['Car', 'Boat', 'Car', 'Boat', 'Boat'], 'quantity': [1,2,3,2,3] }) # 转换为宽表,空值填充0 df_wide = df.pivot_table( index='Person', columns='Item', values='quantity', fill_value=0 ).reset_index() # 输出结果 print(df_wide)
3. SQL
使用条件聚合实现,通用SQL写法如下:
SELECT Person, SUM(CASE WHEN Item = 'Car' THEN quantity ELSE 0 END) AS Car, SUM(CASE WHEN Item = 'Boat' THEN quantity ELSE 0 END) AS Boat FROM 你的表名 GROUP BY Person ORDER BY Person;
如果是支持PIVOT语法的数据库(如SQL Server、Oracle、PostgreSQL 15+),也可以直接用PIVOT语法实现。
内容的提问来源于stack exchange,提问作者mtur
相关产品推荐
相关产品推荐

