如何将矩阵/表格格式数据集转换为table-list结构?
宽表转长表(逆透视)实现方法
你需要完成的结构转换标准称谓是宽表转长表(也叫逆透视、Unpivot操作),核心逻辑是把横向排列的多个指标列(示例中的SP1/SP2/SP3),打平为「维度值-指标类型-指标值」的三行长表结构,目标效果参考下图:
以下是不同场景下可直接复用的实现方案:
方案1:Excel/WPS 无代码操作(适合中小规模数据)
- 选中全部原始数据区域,点击顶部「数据」选项卡中的「从表格/区域」,将数据加载到Power Query编辑器
- 选中
station列,右键点击选择「逆透视其他列」,编辑器会自动完成结构转换 - 将自动生成的「属性」列重命名为SP类别、「值」列重命名为对应数值,点击「关闭并上载」即可导出结果,支持百万行级数据稳定处理
方案2:Python Pandas 批量处理(适合大规模自定义数据集)
核心调用pandas内置的melt逆透视函数即可,示例代码可直接复用:
import pandas as pd # 此处替换为你自己的数据集读取逻辑,支持csv/excel/数据库等多种来源 # df = pd.read_excel("你的原始数据文件路径.xlsx") df = pd.DataFrame({ "station": [2,10,34,53,56,57,62], "SP1": [0,0,0,0,6,1,1], "SP2": [1,3,0,3,0,0,8], "SP3": [1,0,0,5,3,0,10] }) # 执行逆透视转换 result = df.melt( id_vars="station", # 指定保留、不做打平的维度列 var_name="SP_type", # 指定转换后的指标类别列名 value_name="value" # 指定转换后的数值列名 ).sort_values(by=["station", "SP_type"]).reset_index(drop=True) # 导出转换完成的结果 result.to_csv("转换完成的长表数据.csv", index=False)
运行后输出的结果和目标结构完全一致,哪怕原始数据有上百个SP指标列、数十万行数据,都可以秒级完成处理,不需要手动调整列规则。
方案3:SQL 数据库内直接转换(适合数据存储在数据库的场景)
通过UNION ALL将多列指标逐列拆分为行记录即可,示例代码如下:
SELECT station, 'SP1' AS SP_type, SP1 AS value FROM raw_data_table UNION ALL SELECT station, 'SP2' AS SP_type, SP2 AS value FROM raw_data_table UNION ALL SELECT station, 'SP3' AS SP_type, SP3 AS value FROM raw_data_table -- 存在更多SP指标列时,按照上述格式继续追加SQL段即可 ORDER BY station, SP_type;
内容的提问来源于stack exchange,提问作者Octopusea
相关产品推荐
相关产品推荐

