如何用Pandas按分组将多行数据转置为单列
数据集宽表转长表的实现方案
原始数据集
| ID | a1 | a2 | a3 |
|---|---|---|---|
| a | 1 | 5 | 3 |
| a | 2 | 3 | 3 |
| b | 2 | 3 | 5 |
| b | 3 | 5 | 6 |
| c | 5 | 1 | 3 |
| c | 2 | 4 | 2 |
目标输出格式
| ID | Levels |
|---|---|
| a | 1 |
| a | 5 |
| a | 3 |
| a | 2 |
| a | 3 |
| a | 3 |
| b | 2 |
| b | 3 |
| b | 5 |
| b | 3 |
| b | 5 |
| b | 6 |
| c | 5 |
| c | 1 |
| c | 3 |
| c | 2 |
| c | 4 |
| c | 2 |
方法一:Python Pandas 实现
使用 melt 函数快速完成宽表转长表操作:
import pandas as pd # 构造原始数据框 df = pd.DataFrame({ 'ID': ['a', 'a', 'b', 'b', 'c', 'c'], 'a1': [1, 2, 2, 3, 5, 2], 'a2': [5, 3, 3, 5, 1, 4], 'a3': [3, 3, 5, 6, 3, 2] }) # 执行 unpivot 转换 unpivoted_df = df.melt(id_vars='ID', value_name='Levels').drop(columns='variable') # 按 ID 排序(可选,匹配目标格式顺序) unpivoted_df = unpivoted_df.sort_values('ID').reset_index(drop=True) print(unpivoted_df)
方法二:Excel Power Query 实现
- 选中原始数据区域,点击「数据」选项卡 →「从表格/区域」(确保数据包含表头)。
- 在 Power Query 编辑器中:
- 选中
ID列,右键点击列头选择「逆透视其他列」。 - 将自动生成的
Value列重命名为Levels。
- 选中
- 点击「关闭并上载」,将转换后的数据导出回 Excel 表格。
方法三:SQL 实现
通过 UNION ALL 合并多列数据:
SELECT ID, a1 AS Levels FROM your_table UNION ALL SELECT ID, a2 AS Levels FROM your_table UNION ALL SELECT ID, a3 AS Levels FROM your_table ORDER BY ID;
注:替换 your_table 为实际表名。
内容的提问来源于stack exchange,提问作者user7446890
相关产品推荐
相关产品推荐

