如何使用 Power Query 有效地密集表中的排名组

2023-11-30

我一直在尝试最简单的方法对具有组或类别的数据对以下数据进行密集排名。我已经问过类似的问题来对数据进行排名,但这是针对分组数据的。

我希望对分数列进行排名,如下所示,使得最高的数字占据第一位置=第一。第二大的数字占据第二位,依此类推。 如果有平局,则给予相同的排名顺序。假设 ID=3002、ID=3010 的分数=200 出现两次,则 SS3 类排名第一。因此在这种情况下,得分者将具有相同的排名 => 密集排名。所有课程都一样。

类代表一组编组。 每个人都会根据每个班级进行评分。 所有方法都有google,看起来很麻烦并且不知何故占用了更多的powerquery内存空间。

Scores ID Class Rank
130 1002 SS1
180 2003 SS2
140 1006 SS1
130 1007 SS1
200 3002 SS3
200 3010 SS3

预期成绩

Scores ID Class Rank
130 1002 SS1 2nd
180 2003 SS2 1st
140 1006 SS1 1st
130 1007 SS1 2nd
200 3002 SS3 1st
200 3010 SS3 1st
100 3007 SS3 2nd
80 3045 SS3 3rd

挑战是如何使用电源查询来实现这一目标。


Table.AddRankColumn(#"Added Index", "Rank", {"Scores", Order.Descending}, [RankKind = RankKind.Dense])

根据您的版本,您可能需要将其添加到 M 代码中,或者它可能会被视为 Power Query 菜单栏中的一个选项。

另请注意,结果还将按排名顺序对表进行排序。因此,您可能需要添加一个索引列才能将其排序回原始顺序。

这是使用您的数据的示例:

在添加排名列之前将代码编辑为按类别分组

let

//Read in the original table
    Source = Excel.CurrentWorkbook(){[Name="Scores"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Scores", Int64.Type}, {"ID", Int64.Type}, {"Class", type text}}),

//add Index column to be able to return to original order
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),

//Group by class
//  then add rank column to each subtable
    #"Grouped Rows" = Table.Group(#"Added Index", {"Class"}, {
        {"Rank", each Table.AddRankColumn(_, "Rank", {"Scores", Order.Descending}, [RankKind=RankKind.Dense]) }}),

//expand the grouped tables
    #"Expanded Rank" = Table.ExpandTableColumn(#"Grouped Rows", "Rank", {"Scores", "ID", "Index", "Rank"}),

//Sort back to original order
    #"Sorted Rows" = Table.Sort(#"Expanded Rank",{{"Index", Order.Ascending}}),

//remove Index column and re-order the columns as desired
    #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"Scores", "ID", "Class", "Rank"})
in
    #"Reordered Columns"

enter image description here

Notes:

  • 您可以轻松编写自定义函数来将排名输出为序数与基数。

Edit:
if Table.AddRankColumn无法使用

  • 添加自定义函数作为空白查询
  • 根据评论重命名空白查询
//Rename fnRankDense

(t as table)=>

let 
    tbl = Table.Buffer(t),

//Group by Scores
    group = Table.Group(tbl, {"Scores"}, {
        {"grouped", each _, type table[ID=Int64.Type, Class=text, Index=Int64.Type]}
    }),

//Sort by Scores descending
    sort = Table.Sort(group,{"Scores", Order.Descending}),

//add index column for ranking
    #"Add Rank Column" = Table.AddIndexColumn(sort,"Rank",1),

//Expand the table
    #"Expanded Rank" = Table.ExpandTableColumn(#"Add Rank Column", "grouped", {"ID", "Class", "Index"})

in 
    #"Expanded Rank"

新M代码
与自定义函数一起使用

let

//Read in the original table
    Source = Excel.CurrentWorkbook(){[Name="Scores"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Scores", Int64.Type}, {"ID", Int64.Type}, {"Class", type text}}),

//add Index column to be able to return to original order
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),

//Group by class
//   Aggregate using custom function to generate dense rank scores
    #"Grouped Rows" = Table.Group(#"Added Index", {"Class"}, {{"all", 
        each fnRankDense(_), type table [Scores=nullable number, ID=nullable number, Class=nullable text, Index=number, Rank=number]}}),

//Expand the grouped columns and set in desired order
    #"Expanded all" = Table.ExpandTableColumn(#"Grouped Rows", "all", {"Scores", "ID", "Index", "Rank"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded all",{"Scores", "ID", "Class", "Index", "Rank"}),

//Sort rows back to original order and delete index column
    #"Sorted Rows" = Table.Sort(#"Reordered Columns",{{"Index", Order.Ascending}}),
    #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
in
    #"Removed Columns"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Power Query 有效地密集表中的排名组 的相关文章

  • 将单元格背景颜色设置为其包含的 RGB 值。如何?

    下面是我希望通过手动复制和粘贴以外的方式实现的屏幕截图 这是材料设计调色板 在 Excel 中看起来很棒 如何循环遍历范围 B2 B15 并将每个单元格背景颜色设置为其相应的包含颜色 也许是一个VBA loop去经历垂直 B 单元格范围 解
  • 如何自动将图表从 Excel(或 Calc)导出为 PNG

    问题 我正在开发一个 Web 应用程序 它将数据从数据库导出到 Excel 包括图表 这首先是导出的主要原因 现在我希望图表在网页上也可见 而不需要导出数据并打开下载的 Excel 文件 这当然可以使用 JS 库来完成 但是由于图表相当复杂
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • 如何通过VBA代码修复仅在Excel共享模式下发生的运行时错误400

    我真的不知道400错误是什么原因造成的 下面的代码在正常模式下运行得很好 但是一旦我在共享模式下启用 Excel 并尝试使用用户表单 它就会给我 VBA 400 我在这里尝试做的是在向用户显示用户表单后更改形状的文本并禁用其 OnActio
  • Excel 的查找和查找下一个 VBA

    我一直在试图弄清楚如何处理这个问题 但基本上我想要一种方法来打印 B 列中的值 给定与 A 列匹配的特定值 例如 Column A Column B 1 ABC 2 DEF 3 GHI 1 JKL 我想在使用 find findnext 或
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分
  • 这个 if 语句中怎么有太多参数

    My IF下面的声明不断错误射击 指出参数太多 为什么是这样 谁能看出下面的语句有什么错误吗 IF G7 EUR H7 1 15 L7 IF G7 USD H7 1 35 L7 IF G7 AUD H7 1 35 L7 IF G7 CAD
  • 使用 OpenXML 读取列中的 Excel 工作表数据

    有没有一种方法可以使用 OpenXML SDK 和 C 按列而不是按行读取 Excel 工作表 我已经尝试使用 EPPlus 包 但遇到了一些问题 因为我的应用程序还使用 EPPlus 不支持的 xslm 文件 因此 我需要 OpenXML
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • Excel 中使用通配符 {*} 进行 Vlookup

    我有下表 现在 我想检查主题是否具有数据中存在的任何文本 col F I used VLOOKUP A2 F F 1 0 但它正在给予 N A Try 公式为B2 SUM COUNTIF A2 F 2 F 3 gt 0 Edit SUM C
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • 如何VBA等待Windows保存对话框和发送密钥

    我正在创建一个宏文件 用于下载并保存从 SAP 旧版本 7 20 中提取的数据 当出现保存对话框时 未检测到 Windows 对话框 因为我的客户端 SAP 版本是旧版本 7 20 现在我对此的解决方案是发送密钥 但问题是某些数据包含大量数
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • Sharepoint Server 对于 Excel Services 或 Excel Web Access 是必需的吗

    Excel Services 和 Excel Web Access 随 Microsoft Office SharePoint Server 2007 一起提供 我想知道是否可以在不运行 Sharepoint Server 的情况下使用 E
  • 如何在Excel中创建关系矩阵

    给定一个三元组列表 我想得到一个关系矩阵 如下所示 1 A X 1 A Y 1 B X A B C 1 B Z 1 X Y X Z 2 A Z gt 2 Z X Y 2 B X 3 Y Z 3 A Y 3 A Z 2 C Y 如何 可以在
  • Excel,多个 IF AND 更高效的公式

    我正在制作一个电子表格 如下所示 Index Diff Exc Sym Sec Result Criteria Met 3 42 2 07 0 86 0 92 1 83 1 95 0 38 2 93 0 87 0 23 2 01 0 09
  • Excel,循环遍历 XLSM 文件并将行复制到另一个工作表

    我现在遇到的此代码的主要问题是处理我打开的 xlsm 文件的错误 我对这些文件的 VB 代码没有编辑权限 如果 vb 出错 有没有办法跳过文件 我有一个包含大约 99 个 xlsm 文件的文件夹 我希望循环遍历每个文件并复制每个工作簿中的第
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们

随机推荐

  • dplyr 小组未在 Shiny 工作

    我正在使用 R闪亮应用程序 因为我有两个下拉框 第一个下拉列表填充了分类变量 第二个下拉列表填充了数值变量 然后我对分类变量应用 groupby 这是我的代码 dataset lt dataUpload var1 lt as charact
  • RestKit:重新验证后如何重新提交失败的请求?

    我正在开发的 API 要求我在自定义 HTTP 标头中提供身份验证令牌 该令牌每隔几分钟就会过期 并且只要用户闲置足够长的时间 该令牌就可能在用户仍在应用程序内时过期 当令牌过期时 我收到 403 响应 但只有在尝试请求后才发现 让 Res
  • 使用多处理锁定Python写入文件时丢失行

    这是我的代码 from multiprocessing import Pool Lock from datetime import datetime as dt console out STDOUT Console out chunksiz
  • 在fortran中以数组格式写入

    我尝试使用以下内容编写输出 file datnxn矩阵格式 我编写了代码 但输出是一列值为 f 的列 现在的问题是 如何更改要写入的文件的输出格式 从 1 2 4 5 到 1 2 3 4 5 6 8 program eccen implic
  • Objective-c 以半径搜索位置

    Objective C 是否有一个库可以让我指定半径和位置以及位置列表并告诉我哪些位置在该半径内 谢谢 如果你有 CLLocations 那么这样的事情会起作用 Given NSArray locations as an array of
  • OpenCV 3.0 VideoCapture 无法在 Java 中打开视频文件

    OpenCV 3 0 with Java无法打开视频文件 但可以使用摄像头 在我使用 OpenCV 3 0 beta 之前 它在两者中都运行良好 但在 2015 04 24 发布的 OpenCV 3 0 中不适用于视频文件 如果有人知道 O
  • 将字符串分解为Python中的字符列表[重复]

    这个问题在这里已经有答案了 本质上 我想从文件中提取一行文本 将字符分配给一个列表 并创建一个列表中所有单独字符的列表 列表的列表 目前 我已经尝试过 fO open filename rU fL fO readlines 这就是我所拥有的
  • 错误CS0116:命名空间不能直接包含字段或方法等成员

    好吧 我正在尝试制作一个程序来检查程序当前是否正在运行 每当我声明无效时 它都会给我一个错误 我是 C 新手 所以如果它很愚蠢 我很抱歉 using System using System Windows using System Coll
  • 在 WPF 中实现暂停

    这里有一个简单的 WPF 程序
  • Singleton:应该如何使用

    编辑 在另一个问题中 我提供了一个答案 其中包含许多有关单例的问题 答案的链接 关于单例的更多信息在这里 所以我已经阅读了该主题单身人士 好的设计还是拐杖 而且争论仍然很激烈 我将单例视为一种设计模式 好的和坏的 Singleton 的问题
  • 如何使用 Selenium 设置私人代理?

    几天来我一直在尝试使用 Firefox 在 Selenium 中设置私有代理 带身份验证 然而 无论我做什么 我都没有成功 目前 我已经尝试了以下两种方法 在这两种情况下 Firefox 都能正常启动没有任何代理 Proxy proxy n
  • 即使 OkHttp 不是依赖项,OkHttp 连接泄漏日志行也是如此

    当我使用我的应用程序时 我不断在 Logcat 中看到以下日志行 19098 19147
  • 关闭后如何清除dialog/xmlfragment内容? [复制]

    这个问题在这里已经有答案了 我的对话框定义为document onOpenDialog function var oView this getView var oDialog oView byId helloDialog create di
  • 如何通知 GCC 不要使用特定寄存器

    假设我有一个非常大的源代码并打算制作rdx在执行期间完全未使用寄存器 即在生成汇编代码时 我想要的只是通知我的编译器 GCC 它不应该使用rdx at all 注 注册rdx这只是一个例子 我对任何可用的 Intel x86 寄存器都满意
  • 我的类名与 Ruby 的类名冲突

    我的模块中有一个名为 Date 的类 但是当我想使用用 ruby 打包的 Date 类时 它会使用我的 Date 类 module Mymod class ClassA class Date lt Mymod ClassA require
  • 控制CPU利用率

    在运行时如何控制CPU利用率是明智的 轮询CPU负载并插入睡眠 我推荐操作系统功能 Windows 上有用于此目的的性能计数器和 WinAPI 函数 这是一个使用的示例性能计数器 from BCL 团队博客 foreach Process
  • 将 pyqtgraph 绘图嵌入到 QT .ui 中?

    首先 我希望您对我有一些耐心 因为我是此类项目的新手 我也希望不要问愚蠢的问题 话虽这么说 我的主要目标是为树莓派 3 创建一个 UI 它将感应电池和太阳能电池板的电压 电流等 由于我正在研究树莓派并且对Python3有一些了解 所以我决定
  • 从基于文本的表输出中提取列

    qfarm load命令显示我的服务器的负载 输出 PS gt qfarm load Server Name Server Load Load Throttling Load Logon Mode SERVER 01 400 0 Allow
  • Windows 10 上使用 IE 的量角器失败 - 错误代码 199

    我无法让量角器在 Windows 10 上使用 IE 11 它说Unable to create new service InternetExplorerDriverService并且存在代码 199 我尝试过旧的重新安装 升级节点 npm
  • 如何使用 Power Query 有效地密集表中的排名组

    我一直在尝试最简单的方法对具有组或类别的数据对以下数据进行密集排名 我已经问过类似的问题来对数据进行排名 但这是针对分组数据的 我希望对分数列进行排名 如下所示 使得最高的数字占据第一位置 第一 第二大的数字占据第二位 依此类推 如果有平局