如何将数据表中的多列转换为行结构?
如何实现多列到行的数据转换
我有如下结构的原始数据表:
| Id | A | B | C |
|---|---|---|---|
| 001 | abc | bca | def |
| 002 | efg | abc | ghi |
| 003 | bca | xyz | def |
希望将其转换为如下结构:
| Id | Value |
|---|---|
| 001 | abc |
| 001 | bca |
| 001 | def |
| 002 | efg |
| 002 | abc |
| 002 | ghi |
| 003 | bca |
| 003 | xyz |
| 003 | def |
请问该如何实现这种多列到行的转换?
方案1:使用Excel(Power Query)
- 选中原始数据区域,点击「数据」选项卡 →「从表格/区域」,将数据导入Power Query编辑器
- 在编辑器中选中
Id列,点击「转换」选项卡 →「逆透视列」→「逆透视其他列」 - 右键删除自动生成的「属性」列,将「值」列重命名为
Value - 点击「关闭并上载」,即可得到目标格式的数据
方案2:使用SQL
MySQL/PostgreSQL 语法
用UNION ALL拆分多列为行:
SELECT Id, A AS Value FROM your_table UNION ALL SELECT Id, B AS Value FROM your_table UNION ALL SELECT Id, C AS Value FROM your_table ORDER BY Id;
SQL Server 语法
用UNPIVOT语法实现:
SELECT Id, Value FROM your_table UNPIVOT ( Value FOR Columns IN (A, B, C) ) AS unpvt ORDER BY Id;
方案3:使用Python Pandas
利用melt函数快速完成列转行:
import pandas as pd # 构造原始数据(实际场景可通过read_csv/read_excel读取) df = pd.DataFrame({ 'Id': ['001', '002', '003'], 'A': ['abc', 'efg', 'bca'], 'B': ['bca', 'abc', 'xyz'], 'C': ['def', 'ghi', 'def'] }) # 执行列转行,保留Id列,合并其他列为Value melted_df = df.melt(id_vars='Id', value_name='Value').drop(columns='variable') # 按Id排序并重置索引 melted_df = melted_df.sort_values('Id').reset_index(drop=True) print(melted_df)
内容的提问来源于stack exchange,提问作者Feri
相关产品推荐
相关产品推荐

