KDB+中执行透视操作未得到预期表格,问题出在哪?
为啥会这样?
你用的exec命令搭配by分组时,返回的是字典结构——键是分组字段sym,值是每个组里t!c生成的小字典,根本不是表格。exec本来就是用来返回聚合后的结果集合的,不会保留表格的列结构,所以自然看不到单独的sym列。
怎么改?
要拿到带sym列的透视表格,有两种常用办法:
办法1:用内置的pivot函数(最省事)
KDB+自带的pivot就是专门做透视表的,直接指定行、列、值对应的字段就行:
pivot[`sym;`t;`c;m]
执行后会得到你想要的表格:
sym| 2021.01.04 2021.01.05 2021.01.06 2021.01.07 2021.01.08 ---| ------------------------------------------------------- A | 0 3 6 9 12 B | 1 4 7 10 13 C | 2 5 8 11 14
办法2:用select手动构造
要是不想用pivot,也可以用select把分组后的字典拆成表格:
select sym, value from exec t!c by sym from m
先通过exec t!c by sym from m拿到分组字典,再用select把字典的键(也就是sym)和值(日期对应c的映射)拆成表格列。不过如果要把日期单独拆成列,还是pivot更简洁。
额外提一句
exec和select的核心区别:exec返回原子、列表或者字典这类聚合结果,select返回的是表格结构。要表格输出的话,优先用select或者专门的透视函数。pivot还支持动态参数,复杂场景也能适配。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

