将表列的部分添加为新列 - Power Query

Posted

技术标签:

【中文标题】将表列的部分添加为新列 - Power Query【英文标题】:Add sections of a table column as new Columns - Power Query 【发布时间】:2020-10-15 07:30:37 【问题描述】:

我有以下 Unpivoted table,其中包含 Stat-tested % values 以及它们的 Stat-lettersStat-Letters position indicators 在不同的行上。

----------------------------------------
CODE  |  ATTR      |  TEXT     |  VALUE
----------------------------------------
1       mean        I love it     0.45
2       mean        I love it     0.67
3       mean        I love it     0.49
4       mean        I love it     0.21
5       mean        I love it     0.66
1       mean        I love it     abd
2       mean        I love it     e
3       mean        I love it     cd
4       mean        I love it     a
5       mean        I love it     ab
1       mean        I love it     1
2       mean        I love it     1
3       mean        I love it     1
4       mean        I love it     1
5       mean        I love it     1
1       wt-mean     I hate it     0.22
2       wt-mean     I hate it     0.56
3       wt-mean     I hate it     0.13
4       wt-mean     I hate it     0.89
5       wt-mean     I hate it     0.50
1       wt-mean     I hate it     ab
2       wt-mean     I hate it     ae
3       wt-mean     I hate it     c
4       wt-mean     I hate it     b
5       wt-mean     I hate it     de
1       wt-mean     I hate it     1
2       wt-mean     I hate it     1
3       wt-mean     I hate it     1
4       wt-mean     I hate it     1
5       wt-mean     I hate it     1

我想在 CODE 列上进行分组,并将 Stat-tested Lettersposition indicators 添加为单独的列,如下所示:

----------------------------------------------------------------
CODE  |  ATTR      |  TEXT     |  VALUE     LETTERS     POSITION
----------------------------------------------------------------
1       mean        I love it     0.45      abd         1
2       mean        I love it     0.67      e           1
3       mean        I love it     0.49      cd          1
4       mean        I love it     0.21      a           1
5       mean        I love it     0.66      ab          1
1       wt-mean     I hate it     0.22      ab          1
2       wt-mean     I hate it     0.56      ae          1
3       wt-mean     I hate it     0.13      c           1
4       wt-mean     I hate it     0.89      b           1
5       wt-mean     I hate it     0.50      de          1

我在对 Value 列上的数据进行分组时遇到的问题是该列具有混合数据类型(文本、数字)。如何将这些拆分成单独的列,如下所示?

【问题讨论】:

【参考方案1】:

您可以为此插入新的自定义列,如果值是数字,请检查 try

我的来源是Tabelle1

let
    Quelle = Excel.CurrentWorkbook()[Name="Tabelle1"][Content],
    Change_Type = Table.TransformColumnTypes(Quelle,"CODE", Int64.Type, "ATTR", type text, "TEXT", type text, "VALUE", type any),
    Custom_Number = Table.AddColumn(Change_Type, "Number", each if try Number.From([VALUE]) < 1 otherwise null = true then [VALUE] else null),
    Custom_Letters = Table.AddColumn(Custom_Number, "Letters", each if (try Number.From([VALUE]) >= 1 otherwise null) = null then [VALUE] else null),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(Custom_Letters, "POSITION", each if [Number] = null and [Letters]= null then [VALUE] else null),
    Grouped_Rows = Table.Group(#"Hinzugefügte benutzerdefinierte Spalte", "CODE", "ATTR", "TEXT", "VALUE", each List.Max([Number]), type nullable number, "LETTERS", each List.Max([Letters]), type nullable text, "POSITION", each List.Max([POSITION]), type nullable number)
in
    Grouped_Rows

【讨论】:

您可以缩短 if 条件,例如 if try Number.From([VALUE]) &lt; 1 otherwise false then [VALUE] else nullif try Number.From([VALUE]) &gt; 1 otherwise true then [VALUE] else null,对于第三列,可以使用 if try Number.From([VALUE]) &gt;= 1 otherwise false then [VALUE] else null。但是很好的解决方案。

以上是关于将表列的部分添加为新列 - Power Query的主要内容,如果未能解决你的问题,请参考以下文章

Power Query 根据另一列转换一列

Excel Power Query:工序产出数据的整合与提取

Python pandas - 如果项目在列表中,则为新列的值

Power Query - 替换新列中的文本

将向量合并为 df,并将向量名称转换为新列的行

我可以使用 SQL 将存储为 CSV(逗号分隔值)的表列的内容拆分为新表中的单独行吗?