PQ应用之分组排序

实例下载:https://pan.baidu.com/s/1geQaqbT 密码: egjp

在统计工作中经常会遇到去重操作,但有时候我们去重之后会发现原来的顺序也还是有用的,但是去重之后就再也找不回来了。在这里,其实我们需要的不是简单地去重操作,而是分组排序,也就是在原表中带入一些统计信息以方便我们的判断或决策。

有同仁分享过用VBA或是工作表函数来实现分组排序的功能,不过与PQ相比,VBA和工作表函数都略显繁琐,我认为对于这个过程来说,PQ的思路是最接近大众的思维逻辑的了。以下做一介绍。

PQ应用之分组排序_第1张图片
分组排序

假设说我们现在有一个国家列表,这可能是一次马拉松比赛前十名选手的国籍列表,我们需要统计出每个国家最早出现的顺序号,比如说法国是第1个出现的国家,中国是第2个,英国是第5个出现的国家,还需要统计出每个选手在该国家内的顺序号,比如说总成绩第2名的选手是中国的第1名,第5名是中国的第2名,这就是所谓分组排序,这里需要分两步进行:

  • 第1步:先对国家进行排名,这里有5个国家,分别是1法国,2中国,3德国,4美国,5英国;
  • 第2步:在每个国家内部,对各名运动员进行排名,有时候我们会形象地把这个排名叫做小排名

在PQ中,首先我们按照[国家]列对原表进行分组:

分组 = Table.Group(源, {"国家"}, {{"分组表", each Table.AddIndexColumn(_, "第几次出现", 1, 1), type table}}),

得到分组表:

PQ应用之分组排序_第2张图片
分组表

在这里,其实我们已经完成了分组排序的操作,原来的10行数据被分为了5行,每行包含一个 表中表,这个表中表仅包含该国家的运动员并进行了小排名,each Table.AddIndexColumn(_, "第几次出现", 1, 1)就是这个小排名的操作。

以上把第1步和第2步的操作合二为一了,为方便展现,接下来我们添加了"出现顺序"列:

添加出现顺序 = Table.AddIndexColumn(分组, "出现顺序", 1, 1),

PQ应用之分组排序_第3张图片
添加出现顺序

然后我们就可以展开表中表了:

展开 = Table.ExpandTableColumn(添加出现顺序, "分组表", {"序号", "第几次出现"}, {"序号", "第几次出现"}),

PQ应用之分组排序_第4张图片
展开

接下来重排序列:

重排序列 = Table.ReorderColumns(展开,{"序号", "国家", "出现顺序", "第几次出现"}),

PQ应用之分组排序_第5张图片
重排序列

最后按原序号排序即可:

按序号排序 = Table.Sort(重排序列,{{"序号", Order.Ascending}})

PQ应用之分组排序_第6张图片
按序号排序

你可能感兴趣的:(PQ应用之分组排序)