找出同分类下的相邻行
举例
下面的 Excel 中,Block 相同的行属于同一组。
Block |
Bench |
4 |
1 |
5 |
1 |
6 |
1 |
4 |
8 |
5 |
8 |
6 |
8 |
4 |
9 |
5 |
9 |
6 |
9 |
4 |
5 |
5 |
5 |
6 |
5 |
目标:计算出 2 个新列,BenchAbove 为同一组内的上一行的 Bench,如果本行为第 1 行,则 BenchAbove 为空。BenchBelow 为同一组内的下一行的 Bench,如果本行为最后 1 行,则 BenchBelow 为空。结果如下:
Block |
Bench |
BenchAbove |
BenchBelow |
4 |
1 |
8 |
|
5 |
1 |
8 |
|
6 |
1 |
8 |
|
4 |
8 |
1 |
9 |
5 |
8 |
1 |
9 |
6 |
8 |
1 |
9 |
4 |
9 |
8 |
5 |
5 |
9 |
8 |
5 |
6 |
9 |
8 |
5 |
4 |
5 |
9 |
|
5 |
5 |
9 |
|
6 |
5 |
9 |
这类问题的难点是:在不改变行顺序的前提下,获取同一组内的上一行下一行。
编写 SPL 脚本:
A |
|
1 |
=file("data.xlsx").xlsimport@t() |
2 |
=A1.derive(~[:-1].select@1z(Block==A2.Block).Bench:BenchAbove, ~[1:].select@1(Block==A2.Block).Bench:BenchBelow) |
3 |
=file("result.xlsx").xlsexport@(A2) |
A1 读取 Excel 数据
A2 获取相邻行,~[:-1] 获取当前行之前的所有行,~[1:] 则是当前行之后的所有行,select 用于查找,@z 表示从后往前找,@1 表示找到 1 条就结束。
A3 结果导出至 result.xlsx
英文版
英文已更新