excel:根据另一列中的顺序对十进制值列表进行排序

Posted

技术标签:

【中文标题】excel:根据另一列中的顺序对十进制值列表进行排序【英文标题】:excel: sort a list of decimal values based on the order in another column 【发布时间】:2022-01-03 19:38:24 【问题描述】:
ID-A Val-A
22 17.1
4 16.0
7 16.5
ID-B Val-B
9 15.5
2 19.5
45 17.5

这些表(Excel 中的 4 列)是我的输入(这里简化为一个最小的工作示例)。 Val-A 列中值的顺序(这里:最大、最小、中间)是 Val-B 应该排序的顺序。 也就是说,第二个表应该是这样的:

ID-B Val-B
2 19.5
9 15.5
45 17.5

输入列 Val-A 和 Val-B 中值的顺序以及 ID-A 和 ID-B 中的 ID 是任意的。 同样重要的是要注意 Val-A 和 Val-B 中的值永远不会相等,即 Val-A 中的值都不会是 Val-B 中的值。

如何在 Excel 中实现这一点?

【问题讨论】:

你是说Val-B的排列顺序应该和Val-B的排列顺序一致(这里是3,1,2,其中3最大秩)?如果您有 Excel 365,则可以使用 Sortby 来完成。 【参考方案1】:

我建议您对第一个表中的值进行排名,然后将第二个表中的排名与这些排名相匹配,以获得您需要的排序顺序。

使用范围:

=SORTBY(D2:E4,XLOOKUP(RANK(E2:E4,E2:E4),RANK(B2:B4,B2:B4),SEQUENCE(3)))

或使用结构化引用:

=SORTBY(Table2,XLOOKUP(RANK(Table2[Val-B],Table2[Val-B]),RANK(Table1[Val-A],Table1[Val-A]),SEQUENCE(ROWS(Table2))))

编辑

第二个表的行数比第一个表多的情况。

在这方面有点拖延时间,所以没有完全检查。我无法让 Rank 与过滤器一起使用,尽管文档建议它应该可以工作,但 index.js 可以。为避免大量重复,我将其放在 Let 语句中,如下所示:

=LET(FilValB,INDEX(TableB[Val-B],1):INDEX(TableB[Val-B],ROWS(TableA)),
    FilTableB,INDEX(TableB,1,1):INDEX(TableB[Val-B],ROWS(TableA)),
    SORTBY(FilTableB,XLOOKUP(RANK(FilValB,FilValB),RANK(TableA[Val-A],TableA[Val-A]),SEQUENCE(ROWS(FilTableB)))))

【讨论】:

非常感谢,这正是我想要的。但是,仍然存在一个问题:“ID-A”和“Val-A”的行数小于“ID-B”和“Val-B”的行数。例如,如果 A 包含 10 行,B 包含 15 行,那么我想按照您在答案中的描述对 B 的 10 行进行排序,剩余的 5 行可以从排序数组中删除或附加到 10 个排序行之后.因此,重要的是 B 的前 10 个值的顺序与 A 的 10 个值的顺序相匹配...有没有一种简单的方法可以将其合并到您的代码 sn-p 中? 我认为您必须逐行过滤第二个表。早上去看看。 谢谢。我期待着你的帖子。 :) 我也想出了一个解决方案:在中间步骤中,我过滤了 B-Matrix --- =FILTER(D2:E5;RANG(E2:E4;E2:E4)

以上是关于excel:根据另一列中的顺序对十进制值列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Excel:根据另一列中的值和映射值求和值

如何按顺序提取EXCEL里其中一列数据(符合指定条件的)依次显示在另一列里

Excel公式,如果一列中存在重复且另一列中存在特定文本,则对列进行求和

使用 R 根据另一列中的类别计算列和列表之间常见值的百分比

根据另一列中的值比较一列中的两个值

pandas:根据另一列中的值获取与相应索引的确切对应值