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

KDB新手求助:表格转置(Pivot)实现问题

KDB表格转置(Pivot)解决方案

针对你提供的表格,我们可以分两步完成转置操作:

步骤1:将宽格式的OB列转为长格式

首先把原表格中OB_p1到OB_p4这类列拆分为OB(标识序号,如OB_1)和对应的值,生成长格式表格:

// 提取所有OB开头的列名
obCols: cols[t] where cols[t] like "OB_*";
// 生成对应OB标识(OB_p1 → OB_1)
obNames: `$"OB_" ,/: string 1+til count obCols;
// 展开为长格式表格,包含sym、exchange、OB、val字段
longT: ungroup `sym`exchange`OB`val flip (t`sym; t`exchange; obNames; each[;t] obCols);

执行后longT的结构如下:

sym   exchange OB    val
----- -------- ----- -----
IBM   A        OB_1  100.1
IBM   A        OB_2  100.2
IBM   A        OB_3  100.5
IBM   A        OB_4  100.8
FB    A        OB_1  100.1
FB    A        OB_2  100.2
FB    A        OB_3  100.6
FB    A        OB_4  100.8
TESLA B        OB_1  100.1
TESLA B        OB_2  100.3
TESLA B        OB_3  100.7
TESLA B        OB_4  100.8
IBM   B        OB_1  100.1
IBM   B        OB_2  100.4
IBM   B        OB_3  100.8
IBM   B        OB_4  100.9

步骤2:将长格式表格转置为目标宽格式

通过xgroup实现pivot,按exchange和OB分组,将sym作为列名,val作为对应值:

// 执行pivot操作
pivotT: `exchange`OB xgroup update val:val by sym from longT;
// 调整列顺序,确保exchange、OB在前,sym列按顺序排列
pivotT: pivotT `exchange`OB, exec distinct sym from longT;

最终得到的pivotT就是目标表格:

exchange OB    IBM   FB    TESLA
-------- ----- ----- ----- -----
A        OB_1  100.1 100.1
A        OB_2  100.2 100.2
A        OB_3  100.5 100.6
A        OB_4  100.8 100.8
B        OB_1  100.1       100.1
B        OB_2  100.4       100.3
B        OB_3  100.8       100.7
B        OB_4  100.9       100.8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:54:41