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

如何将表格中各Symbol的起止日期转为日期序列?附优化需求

日期范围扩展表的优化问题

需求背景

基于表格中的entry_date和remove_date字段扩展表格,以便后续进行日期匹配的表连接操作。

原表格

symbolind_codeentry_dateremove_date
A61122000.09.072001.09.03
B61122009.11.112011.10.08
C61122012.01.212013.01.05

期望扩展结果

每个symbol对应entry_date至remove_date之间的每日记录,结构如下:

symbolind_codedate
A61122000.09.07
A61122000.09.08
.........
A61122001.09.03
B61122009.11.11
.........
C61122012.01.21
.........

现有实现脚本

// original table
t = table(
    `A`B`C as SYMBOL, 
    `6112`6112`6112 as IND_CODE, 
    [2000.09.07, 2009.11.11, 2012.01.21] as ENTRY_DT, 
    [2001.09.03, 2011.10.08, 2013.01.05] as REMOVE_DT
)

// initialize result table
re = table(1:0, `symbol`ind_code`date, [SYMBOL, SYMBOL, DATE])

// use for loop to tranverse each row in original table
// use `take` or `seq` function to transform a single-row record into multiple rows aligned with the expanded date range. 
for(row in t){
    date = seq(row[`ENTRY_DT], row[`REMOVE_DT])
    ind_code = take(row[`IND_CODE], date.size())
    symbol = take(row[`SYMBOL], date.size())
    re.tableInsert(table(symbol, ind_code, date))
}
select * from re

现有脚本可实现需求,但生成的是所有日历日,需后续过滤。现咨询两个问题:

  1. 是否存在可直接生成工作日的函数?
  2. 能否将现有脚本改写为向量化实现方式?

解答

1. 直接生成工作日的函数

在DolphinDB中,可使用businessDays函数直接生成指定日期范围内的工作日,该函数默认排除周末,也支持传入自定义节假日列表过滤指定日期。

示例用法:

// 生成默认规则下的工作日
businessDays(2000.09.07, 2001.09.03)

// 传入自定义节假日列表
customHolidays = [2000.10.01, 2000.10.02, 2000.10.03]
businessDays(2000.09.07, 2001.09.03, customHolidays)

2. 向量化实现方式

利用DolphinDB的each和flatten函数实现向量化扩展,替代循环遍历,大幅提升执行效率:

// 原表定义
t = table(
    `A`B`C as SYMBOL, 
    `6112`6112`6112 as IND_CODE, 
    [2000.09.07, 2009.11.11, 2012.01.21] as ENTRY_DT, 
    [2001.09.03, 2011.10.08, 2013.01.05] as REMOVE_DT
)

// 向量化生成日期数组(日历日)
t[`dateArray] = each(seq, t.ENTRY_DT, t.REMOVE_DT)
// 若需生成工作日,替换为:each(businessDays, t.ENTRY_DT, t.REMOVE_DT)

// 展平数组得到最终结果表
result = select symbol, ind_code, flatten(dateArray) as date from t

这种方式无需循环和逐行插入,性能远优于原脚本,且可灵活切换生成日历日或工作日。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:44:51