前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不同列不同行的数据如何进行转置?

不同列不同行的数据如何进行转置?

作者头像
逍遥之
发布2020-03-24 15:48:15
2.8K0
发布2020-03-24 15:48:15
举报
文章被收录于专栏:数据技巧数据技巧

原表:

目标表:

案例模拟文件下载 http://gofile.me/4KHV7/SUo5ywXxC

我们来分享下不同思路的处理方式。 先展示一下网友蜗牛给的答案。

(一) 通过分组后逆透视后再用透视还原来完成。

1. 增加列判断归属,并向下填充。

代码语言:javascript
复制
Table.AddColumn(源, "自定义", each if Text.Contains([列1],"班") then [列1] else null)
Table.FillDown(已添加自定义,{"自定义"})

2. 分组并进行内部计算

代码语言:javascript
复制
Table.Group(向下填充,
             {"自定义"}, 
             {"计数", each Table.UnpivotOtherColumns(   //逆透视
                                                    Table.PromoteHeaders(   //提升标题
                                                                        Table.TransformColumns(  //转换
                                                                                               Table.Transpose(   //转置
                                                                                                              Table.RemoveColumns(_,"自定义")  //去除标题
                                                                                                               ),
                                                                                                {"Column1",each try DateTime.ToText(_) otherwise "日期"}  //判断是否为日期,非日期的改为标题日期
                                                                                               )
                                                                         ),
                                                    {"日期"},
                                                    "属性",
                                                    "值"
                                                    ) 
             }
             )

我们对整个过程从内向外进行一下分解。针对单个分组我们来一步一步看。

A. 去除自定义列
代码语言:javascript
复制
Table.RemoveColumns(_,"自定义")
B. 表格转置
代码语言:javascript
复制
Table.Transpose([去除自定义])
C. 通过转换得到错误的值并用错误值替换的方式来命名日期列的标题。
代码语言:javascript
复制
Table.TransformColumns([转置],{"Column1",each
                                        try DateTime.ToText(_)
                                        otherwise "日期"
                              }
                       )
D. 提升标题
代码语言:javascript
复制
Table.PromoteHeaders([判断日期列并重命名])
E. 逆透视
代码语言:javascript
复制
Table.UnpivotOtherColumns([提升标题],
                          {"日期"},
                           "属性",
                           "值"
                          )

到这一步,分组内的计算完成。

3. 展开,重命名,调整数据类型

4. 最后通过透视得到最终的结果

代码语言:javascript
复制
Table.Pivot(更改的类型, List.Distinct(更改的类型[属性]), "属性", "值"

再来看下简化的操作。

(二) 直接在分组表格里面修改标题进行合并

1. 到分割表格并转置这一步基本都一样

2. 提升标题

代码语言:javascript
复制
Table.PromoteHeaders([转置])

3. 更改包含"班"关键词的标题改为"时间"(最关键一步)

代码语言:javascript
复制
Table.TransformColumnNames([自定义.1], each 
                                        if Text.Contains(_,"班") then 
                                        Replacer.ReplaceText(_,_,"时间") 
                                        else _)

4. 展开数据,筛选并调整后即可得到最终结果。

如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据技巧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一) 通过分组后逆透视后再用透视还原来完成。
    • 1. 增加列判断归属,并向下填充。
      • 2. 分组并进行内部计算
        • A. 去除自定义列
        • B. 表格转置
        • C. 通过转换得到错误的值并用错误值替换的方式来命名日期列的标题。
        • D. 提升标题
        • E. 逆透视
      • 3. 展开,重命名,调整数据类型
        • 4. 最后通过透视得到最终的结果
        • (二) 直接在分组表格里面修改标题进行合并
          • 1. 到分割表格并转置这一步基本都一样
            • 2. 提升标题
              • 3. 更改包含"班"关键词的标题改为"时间"(最关键一步)
                • 4. 展开数据,筛选并调整后即可得到最终结果。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档