如何返回最大最小值以及对应的索引

请问下有一张表第一列是日期索引,剩余n-1列存放收益率数据,有没有办法返回每一列的最大/最小值以及该值对应的索引?例如有下列表:

date	        ret1	ret2
2022.01.01	0.2844	0.9768
2022.01.02	0.1531	0.5791
2022.01.03	0.6683	0.418
2022.01.04	0.6441	0.8265
2022.01.05	0.3082	0.0918
2022.01.06	0.2197	0.5578

我要返回ret1列的最大值以及对应的日期0.6683/2022.01.03 最小值以及对应的日期0.1531/2022.01.02

ret1列的最大值以及对应的日期0.9768/2022.01.01 最小值以及对应的日期0.0918/2022.01.05

请先 登录 后评论

1 个回答

wale

先建个表产生模拟数据:

date=2022.01.01 + 0..31
ret1=rand(1.0,size(date))
ret2=rand(1.0,size(date))
tb=table(date,ret1,ret2)

表数据如下:

date	ret1	ret2
2022.01.01	0.1204	0.8332
2022.01.02	0.6071	0.0439
2022.01.03	0.8292	0.6409
2022.01.04	0.9989	0.0281
2022.01.05	0.779	0.4947
2022.01.06	0.8342	0.4477
2022.01.07	0.9014	0.0134
2022.01.08	0.5417	0.2441
2022.01.09	0.4288	0.0143
2022.01.10	0.4791	0.9859
2022.01.11	0.9654	0.2847
2022.01.12	0.4454	0.8206
2022.01.13	0.8525	0.8255
2022.01.14	0.0861	0.0172
2022.01.15	0.7788	0.2248
2022.01.16	0.2623	0.8577
2022.01.17	0.1601	0.9486
2022.01.18	0.1889	0.7622
2022.01.19	0.8978	0.1683
2022.01.20	0.1762	0.4089
2022.01.21	0.1804	0.8442
2022.01.22	0.4337	0.3034
2022.01.23	0.3838	0.6771
2022.01.24	0.778	0.2225
2022.01.25	0.0916	0.4198
2022.01.26	0.5623	0.2997
2022.01.27	0.8017	0.0754
2022.01.28	0.5301	0.1132
2022.01.29	0.8758	0.934
2022.01.30	0.1143	0.3779
2022.01.31	0.9446	0.5951
2022.02.01	0.1547	0.7291


用imax等自定义函数,示例如下:

def f(x,y,dates){
 return table(y as col,min(x) as min,max(x) as max,dates[imin(x)] as imin,dates[imax(x)] as imax)
}
unionAll(peach(f{,,tb.date},tb.values()[1:],colNames(tb)[1:]),0)


执行后返回结果如下:

col	min	max	imin	imax
ret1	0.0861	0.9989	2022.01.14	2022.01.04
ret2	0.0134	0.9859	2022.01.07	2022.01.10

请先 登录 后评论