如何在MySQL中转置表格行与列名并映射列名为指定数值?
一行表格转换及列名映射方案(无pivot命令)
针对仅有一行的宽表转长表、同时完成列名数值映射的需求,以下是几种无需pivot命令的可行方案:
1. Python Pandas 实现(利用melt转长表)
借助melt函数将宽表转为长表,再通过字典映射完成列名到数值的转换,代码示例:
import pandas as pd # 示例原始单行表格 df = pd.DataFrame({'A': [15], 'B': [25], 'C': [35], 'D': [45], 'E': [55]}) # 定义列名-数值映射规则 col_mapping = {'A': 10**9, 'B': 10**8, 'C': 10**7, 'D': 10**6, 'E': 10**5} # 转换为长表:列名转为一列,数据转为另一列 long_format = df.melt(var_name='原列名', value_name='对应数据') # 添加映射后的数值列 long_format['映射数值'] = long_format['原列名'].map(col_mapping) print(long_format)
输出结果会包含三列:原列名、对应数据、映射数值,按需筛选列即可。
2. SQL 手动构造行(无pivot/unpivot)
如果是在数据库环境中,通过UNION ALL手动拼接每一行数据,避免使用pivot类命令:
-- 假设原始表名为single_row_data,列依次为A、B、C、D、E SELECT 'A' AS 原列名, A AS 对应数据, 1000000000 AS 映射数值 FROM single_row_data UNION ALL SELECT 'B' AS 原列名, B AS 对应数据, 100000000 AS 映射数值 FROM single_row_data UNION ALL SELECT 'C' AS 原列名, C AS 对应数据, 10000000 AS 映射数值 FROM single_row_data UNION ALL SELECT 'D' AS 原列名, D AS 对应数据, 1000000 AS 映射数值 FROM single_row_data UNION ALL SELECT 'E' AS 原列名, E AS 对应数据, 100000 AS 映射数值 FROM single_row_data;
此方法适合列数较少的场景,直接生成目标结构的结果集。
3. Excel 公式实现
无需使用数据透视表(对应pivot功能),通过公式手动完成转换:
- 在空白列(如A列)依次输入原列名:
A、B、C、D、E - B列提取对应数据:在B1单元格输入公式
=INDEX($F$1:$J$1, MATCH(A1, $F$1:$J$1, 0))(假设原始表头在F1:J1,数据在F1:J1),拖拽填充至B5 - C列生成映射数值:在C1单元格输入公式
=VLOOKUP(A1, {"A",1000000000;"B",100000000;"C",10000000;"D",1000000;"E",100000}, 2, FALSE),拖拽填充至C5
内容的提问来源于stack exchange,提问作者Ames ISU
相关产品推荐
相关产品推荐

