6.9 取同分类内的相邻行值(在相邻区间内查找和筛选)
有如下 Excel 表格:
需要增加 PreviousDailySales 和 NextDailySales 两个列,分别填写上一个销售日和下一个销售日当前产品的销售额。
问题分析:数据是先按日期排序,后按产品排序的,如果把产品相同的行视为一个组,则问题转变为同一组内取上一行和下一行的值。问题的难点在于如何不改变行顺序的情况下去找同一组内的上一行和下一行
实现思路有两种 (在 D1 格中填代码):
1、在相邻区间内查找和筛选:不改变数据的顺序,直接往前找和往后找,找到第一条同名产品的行,就是上一个销售日 / 下一个销售日的销售额。
A | |
---|---|
1 | =E(‘A1:C2401’) |
2 | =A1.derive(~[:-1].select@1z(ProductName==A1.ProductName).Sales:PreviousDailySales, ~[1:].select@1(ProductName==A1.ProductName).Sales:NextDailySales) |
3 | return A2.new(PreviousDailySales,NextDailySales) |
A2:~[:-1] 表示从开头到上一行为止的所有行集合,~[1:] 表示从下一行到结束的所有行集合
2、取同分类内的相邻行值:把数据按产品分组,组内直接取上一行的值和下一行的值,就是上一个销售日 / 下一个销售日的销售额。
A | |
---|---|
1 | =E(‘A1:C2401’).derive(:PreviousDailySales,:NextDailySales) |
2 | =A1.group(ProductName).run(~.run(PreviousDailySales=Sales[-1], NextDailySales=Sales[1])) |
3 | return A1.new(PreviousDailySales,NextDailySales) |
A2:Sales[-1] 表示上一行的 Sales 列值,Sales[1] 表示下一行的 Sales 列值