对同一分类下的数据进行和次序有关的过滤
例题描述和简单分析
有 Excel 文件 stock.xlsx,部分数据如下:
证券代码 |
交易日期 |
日开盘价 |
check |
603960 |
2017-08-17 |
29.13 |
2 |
603960 |
2017-08-28 |
29.44 |
1 |
603960 |
2017-08-29 |
32 |
3 |
603960 |
2020-02-10 |
32.16 |
1 |
603960 |
2020-02-11 |
36 |
3 |
603963 |
2017-09-22 |
18.12 |
2 |
603963 |
2017-09-25 |
19.93 |
1 |
603963 |
2017-09-26 |
21.92 |
1 |
603963 |
2017-10-16 |
45 |
3 |
603963 |
2017-12-25 |
25 |
1 |
603963 |
2017-12-26 |
27.68 |
1 |
603963 |
2017-12-27 |
30.3 |
3 |
603963 |
2018-03-08 |
25.52 |
1 |
… |
… |
… |
… |
现需要对同一证券代码下的数据进行过滤,过滤要求为从第一次 check 列出现 2 至第一次 check 列出现 3 之间的数据,部分结果如下:
证券代码 |
交易日期 |
日开盘价 |
check |
603960 |
2017-08-17 |
29.13 |
2 |
603960 |
2017-08-28 |
29.44 |
1 |
603960 |
2017-08-29 |
32 |
3 |
603963 |
2017-09-22 |
18.12 |
2 |
603963 |
2017-09-25 |
19.93 |
1 |
603963 |
2017-09-26 |
21.92 |
1 |
603963 |
2017-10-16 |
45 |
3 |
… |
… |
… |
… |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=file("stock.xlsx").xlsimport@t() |
2 |
=A1.group(#1).conj(~.m(~.pselect(check==2):~.pselect(check==3))) |
3 |
=file("result.xlsx").xlsexport@t(A2) |
简要说明:
A1 读取 stock.xlsx 数据,返回成序表
A2 按证券代码列(#1 代表第一列)分组,每组内取第一个 check 为 2 至第一个 check 为 3 之间的数据,各组结果合并
A3 结果导出至 result.xlsx
http://club.excelhome.net/thread-1572959-1-1.html