如何获取列及其对应索引的最大值/最小值?



我有一个表如下(只是给一个例子):

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

第一列是日期列,其余列存储yield的数据。

我想获得每列(不包括日期列)的最大/最小值及其对应的日期。例如,对于列"ret1",我的预期结果是0.6683(最大值)/2022.01.03(日期)和0.1531(最小值)/2022.01.02(日期)。

我将创建一个与问题中给定数据相似的随机值表。

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

然后用函数minmaximinimax定义函数f:

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

最新更新