对同一分类下的数据进行和次序有关的过滤
例题描述和简单分析
有 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