我正在尝试过滤掉大型数据集中某个值范围内的值。 我在这里摘录了一些值数据:
Chng.1 Chng.2 Length Post Index
117,200 117,400 200 bf 1
118,800 119,000 200 bf 2
118,939 118,949 10 bo 3
119,863 119,873 10 bo 4
120,400 121,200 800 bf 5
120,869 120,879 10 bf 6
121,400 121,600 200 bo 7
128,800 129,200 400 bo 8
129,065 129,075 10 bo 9
在这个数据集中,我希望索引6和9被过滤掉,因为它们已经包含在一个范围内。
即索引6(120,869-120,879)的价格范围在索引5(120,400-121,200)的价格范围内,并且都位于“ bf”之后。索引9也在索引8的范围内,并且共享帖子“ bo”。
谢谢。
答案 0 :(得分:1)
具体来说,您的代码(后续范围在上一个代码之内)可以使用以下代码:
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
sort = Table.Sort(Source, List.Transform({"Post", "Chng.1", "Chng.2"}, each {_, 0})),
group = Table.Group(sort, Table.ColumnNames(Source), {}, 0,
(a,b)=>Number.From(b[Post] <> a[Post] or b[Chng.1] >= a[Chng.2]))
in
group
否则(范围是相交的),请尝试以下代码:
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
cols = {"Post", "Chng.1", "Chng.2"},
sort = Table.Sort(Source, List.Transform(cols, each {_, 0})),
group = Table.Group(sort, cols,
{{"Chng.1_new", each List.Min([Chng.1])},
{"Chng.2_new", each List.Max([Chng.2])}}, 0,
(a,b)=>Number.From(b[Post] <> a[Post] or b[Chng.1] >= a[Chng.2])),
add = Table.AddColumn(group, "Length", each ([Chng.2_new] - [Chng.1_new])*1000), //multiplication by 1000 is optional, depends on your decimal separator
remove = Table.RemoveColumns(add, List.Skip(cols))
in
remove