使用 Power Query M 将分类列转换为虚拟列

Transform categorical column into dummy columns using Power Query M

使用 Power Query "M" 语言,如何将包含离散值的分类列转换为多个 "dummy" 列?我来自 Python 世界,有几种方法可以做到这一点,但下面是一种方法:

>>> import pandas as pd
>>> dataset = pd.DataFrame(list('ABCDACDEAABADDA'),
               columns=['my_col'])
>>> dataset
   my_col
0       A
1       B
2       C
3       D
4       A
5       C
6       D
7       E
8       A
9       A
10      B
11      A
12      D
13      D
14      A
>>> pd.get_dummies(dataset)
    my_col_A  my_col_B  my_col_C  my_col_D  my_col_E
0          1         0         0         0         0
1          0         1         0         0         0
2          0         0         1         0         0
3          0         0         0         1         0
4          1         0         0         0         0
5          0         0         1         0         0
6          0         0         0         1         0
7          0         0         0         0         1
8          1         0         0         0         0
9          1         0         0         0         0
10         0         1         0         0         0
11         1         0         0         0         0
12         0         0         0         1         0
13         0         0         0         1         0
14         1         0         0         0         0

有趣的问题。这是我发现的一种简单、可扩展的方法:


  1. 创建一个自定义列(添加列 > 自定义列 > 公式 = 1)。

  2. 添加索引列(添加列 > 索引列)。

  3. 在自定义列上进行透视(select my_col > 转换 > 透视列)。

  4. 将空值替换为 0(select 所有列 > 转换 > 替换值)。


下面是此过程的 M 代码:

    #"Added Custom" = Table.AddColumn(#"Previous Step", "Custom", each 1),
    #"Added Index" = Table.AddIndexColumn(#"Added Custom", "Index", 0, 1),
    #"Pivoted Column" = Table.Pivot(#"Added Index", List.Distinct(#"Added Index"[my_col]), "my_col", "Custom"),
    #"Replaced Value" = Table.ReplaceValue(#"Pivoted Column",null,0,Replacer.ReplaceValue,Table.ColumnNames(#"Pivoted Column"))

完成上述操作后,您可以根据需要删除索引列。