6.7 按序号对齐分组:每组最多保留一条记录

 

按指定的序号顺序将数据排序,每组保留最多一个匹配成员。适用于我们希望按照指定顺序查看或者使用数据的情况。

根据每日销售表,按每周一到周日的顺序查询销售记录。部分数据如下:

Week Day Amount
5 Sunday 1101.2
5 Saturday 538.6
5 Friday 2142.4
5 Thursday 1456.0
5 Wednesday 48.0
5 Tuesday 1376.0
5 Monday 676.0
4 Sunday 448.0
4 Saturday 4031.0
4 Friday 364.8

在 SPL 中函数 A.align(n,y) 用于对齐分组 ,直接划分为 n 个组(从 1 到 n),并根据分组表达式 y 直接计算出每个成员对应的组号。默认每组保留最多一个匹配成员。

脚本:

A
1 =T(“DailySales.csv”)
2 [“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”,“Sunday”]
3 =A1.group(Week; ~.align(7,A2.pos(Day)):WeekSales)
4 =A3.conj(WeekSales)
5 =A4.select(~)

A1:查询每日销售表。
A2:定义从周一到周日的序列。
A3:销售数据按周分组时,使用函数 A.align(n,y) 将每周的销售记录,按照 A2 定义好的顺序进行对齐。这里值得注意的是,对齐分组可能会有空组。例如当第二周的周五和周六没有销售记录时,仍然会产生每周 7 个小组:

Week
[2,Monday,1194.0]
[2,Tuesday,1622.4]
[2,Wednesday,319.2]
[2,Thursday,802.0]
(null)
(null)
[2,Sunday,2123.2]

A4:将每周排序后的销售记录合并。
A5:从结果集中选出非空的记录。

运行结果:

Week Day Amount
1 Monday 3063.0
1 Tuesday 3868.6
1 Wednesday 2713.5
1 Thursday 1005.9
1 Friday 1675.0
1 Saturday 400.0
1 Sunday 2018.2
2 Monday 1194.0
2 Tuesday 1622.4
2 Wednesday 319.2