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

如何在Python或SQL中实现无聚合的Pivot(表转置)操作

表格转置实现方案(无聚合修改数值)

Python 实现

直接用 pandas 的 pivot 方法对数据进行重塑,由于你的数据中每个 (Metric, Type) 组合对应唯一的 Value,无需聚合操作即可完成转置:

import pandas as pd

d = {'Type': ['a','a','a','a','a','b','b','b','b','b'],
'Metric': ['q rate','w rate','e rate','r rate', 't rate','q rate','w rate','e rate','r rate', 't rate'],
'Value':[1,2,3,4,5,9,8,7,6,5]}
df = pd.DataFrame(data=d)

# 执行转置操作
transposed_df = df.pivot(index='Metric', columns='Type', values='Value')

print(transposed_df)

执行结果:

Type       a  b
Metric         
q rate     1  9
w rate     2  8
e rate     3  7
r rate     4  6
t rate     5  5

SQL 实现

方案1:使用 PIVOT(聚合不修改数值)

SQL 的 PIVOT 语法强制要求聚合函数,但你的数据中 (Metric, Type) 是唯一组合,每个分组仅对应一个 Value,因此 MAX()/MIN()/SUM() 等聚合函数不会改变原始数值,结果完全符合需求:

SELECT * FROM
(
SELECT Type, Metric, Value
FROM `table`
)
PIVOT(
  MAX(Value) FOR Type IN ('a' AS a, 'b' AS b) -- 替换为实际的 Type 取值列表
) AS pivoted_table;

若 Type 取值数量不固定,可通过动态 SQL 自动生成列列表(以 BigQuery 为例):

DECLARE type_list STRING;

-- 获取所有唯一 Type 值,拼接为 PIVOT 所需格式
SET type_list = (
  SELECT STRING_AGG(DISTINCT CONCAT("'", Type, "' AS ", Type), ', ')
  FROM `table`
);

-- 动态执行转置
EXECUTE IMMEDIATE FORMAT("""
SELECT * FROM
(
SELECT Type, Metric, Value
FROM `table`
)
PIVOT(
  MAX(Value) FOR Type IN (%s)
) AS pivoted_table
""", type_list);

方案2:条件聚合(无 PIVOT 关键字)

如果不想使用 PIVOT 语法,可通过条件聚合手动构造目标列,同样因 (Metric, Type) 唯一,聚合操作不会修改数值:

SELECT
  Metric,
  MAX(CASE WHEN Type = 'a' THEN Value END) AS a,
  MAX(CASE WHEN Type = 'b' THEN Value END) AS b
  -- 按需添加更多 Type 对应的 CASE WHEN 语句
FROM `table`
GROUP BY Metric;

动态版本(以 BigQuery 为例):

DECLARE case_statements STRING;

SET case_statements = (
  SELECT STRING_AGG(DISTINCT CONCAT("MAX(CASE WHEN Type = '", Type, "' THEN Value END) AS ", Type), ', ')
  FROM `table`
);

EXECUTE IMMEDIATE FORMAT("""
SELECT
  Metric,
  %s
FROM `table`
GROUP BY Metric
""", case_statements);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:51:57