如何在DolphinDB中合并等长数组并按规则聚合对应数组?
使用DolphinDB内置函数实现数组合并去重并取对应最大值
需求说明
给定两组等长数组:
ap = 23 24 25 26 av = 10 20 30 40 ap2 = 24 25 26 27 av2 = 32 32 32 32
需完成两个操作:
- 合并
ap与ap2,去重后升序得到result_ap = 23 24 25 26 27 - 对每个去重后的元素,取其在
av和av2中对应值的最大值,得到result_av = 10 32 32 40 32
向量化实现方案
利用DolphinDB的字典与内置聚合函数,完全避免循环,大幅提升性能:
步骤1:构建字典存储每个ap值的最大av值
将两组数组合并为键值对,按键分组取最大值生成字典:
// 合并两组键值对列表 combined = concat(zip(ap, av), zip(ap2, av2)) // 按键分组,取每组的最大值生成字典 maxDict = dict(combined.groupby(x->x[0]).keys(), combined.groupby(x->x[0]).max(x->x[1]))
步骤2:生成去重排序后的结果数组
// 合并ap和ap2,去重后升序排序 result_ap = sort(union(ap, ap2)) // 根据result_ap匹配字典中的最大值,得到result_av result_av = maxDict[result_ap]
完整代码验证
ap = [23,24,25,26] av = [10,20,30,40] ap2 = [24,25,26,27] av2 = [32,32,32,32] combined = concat(zip(ap, av), zip(ap2, av2)) maxDict = dict(combined.groupby(x->x[0]).keys(), combined.groupby(x->x[0]).max(x->x[1])) result_ap = sort(union(ap, ap2)) result_av = maxDict[result_ap] // 输出结果 print(result_ap) // 输出:[23,24,25,26,27] print(result_av) // 输出:[10,32,32,40,32]
性能优势
该方案全程使用DolphinDB内置向量化函数,充分利用引擎的计算优化,避免了循环带来的高延迟,适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者Lambert
相关产品推荐
相关产品推荐

