You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对多指标宽表执行(un)pivot操作将指标转为单列存储?

你需要实现的是**逆透视(UNPIVOT / melt)**操作,和pivot(长表转宽表)是反向操作,作用是将宽表中多个指标列拆分为多行,正好匹配你的需求。

常用实现方式

SQL实现

如果使用支持UNPIVOT语法的数据库(PostgreSQL、BigQuery、Spark SQL等),可以直接用原生语法:

SELECT 
  transaction_id,
  state,
  metric_name,
  flag
FROM 你的原始表名
UNPIVOT (
  flag FOR metric_name IN (metric_1, metric_2, metric_3)
)

如果是不支持UNPIVOT的数据库(如MySQL),可以用UNION ALL实现相同效果:

SELECT transaction_id, state, 'metric_1' AS metric_name, metric_1 AS flag FROM 你的原始表名
UNION ALL
SELECT transaction_id, state, 'metric_2' AS metric_name, metric_2 AS flag FROM 你的原始表名
UNION ALL
SELECT transaction_id, state, 'metric_3' AS metric_name, metric_3 AS flag FROM 你的原始表名
ORDER BY transaction_id, metric_name

Python Pandas实现

使用pandas的melt方法即可直接完成转换:

import pandas as pd

# df为读取原始宽表得到的DataFrame对象
result_df = df.melt(
    id_vars=["transaction_id", "state"],
    value_vars=["metric_1", "metric_2", "metric_3"],
    var_name="metric_name",
    value_name="flag"
)

两种实现的输出结果和你给出的预期结构完全一致,会自动保留原始null值,每个transaction_id对应指标数量的行数。

内容的提问来源于stack exchange,提问作者samba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:39:03