【问题标题】:Using OneHotEncoder in multiple columns with repetead categories amongst columns?在多个列中使用 OneHotEncoder 并在列中重复类别?
【发布时间】:2021-09-11 07:23:40
【问题描述】:

想象一下,我在 3 列中有 4 个类别,但这些类别在列中重复出现。比如……

df1 = pd.DataFrame(data=[['a', 'b', 'c'], ['b', 'a', 'd'], ['a', 'c', 'd'], ['b', 'd', 'a']])
   0  1  2
0  a  b  c
1  b  a  d
2  a  c  d
3  b  d  a

当我转换时,我得到 8 列,而我应该只得到 4 列(每个类别(a、b、c 和 d)一个。

ohe = ColumnTransformer([('ohe', OneHotEncoder(categories='auto', sparse=False), [0, 1, 2])], remainder='passthrough')

df2 = ohe.fit_transform(df1)

作为 df2 的八个列类别,但我只想获得四个...在我的列中分布的每个“a”、“b”、“c”和“d”类别。

有没有办法获得这个输出?

Out[17]: 
   a  b  c  d
0  1  1  1  0
1  1  1  0  1
2  1  0  1  1
3  1  1  0  1

【问题讨论】:

    标签: python pandas one-hot-encoding dummy-variable


    【解决方案1】:

    更新

    我只想获得四个...一个用于我的列中分布的“a”、“b”、“c”和“d”类别

    您可以在列轴上使用value_counts

    >>> df1.apply(pd.value_counts, axis="columns").fillna(0).astype(int)
       a  b  c  d
    0  1  1  1  0
    1  1  1  0  1
    2  1  0  1  1
    3  1  1  0  1
    

    旧答案

    关于编码如何工作的一些解释:

    >>> df1
       W  X  Y  Z
    0  a  b  c  c
    1  b  a  a  b
    2  a  c  a  b
    
    >>> df1.nunique()
    W    2  # [a, b]
    X    3  # [a, b, c]
    Y    2  # [a, c]
    Z    2  # [b, c]
    

    对于W 列,[a, b] 有两个不同的值,因此您需要 2 列对它们进行编码:例如:

       a  b
    a  1  0
    b  0  1
    

    对于X 列,[a, b, c] 有三个不同的值,因此您需要 3 列来对它们进行编码。例如:

       a  b  c
    a  1  0  0
    b  0  1  0
    c  0  0  1
    

    注意单位矩阵。

    让我们使用pd.get_dummies 而不是OneHotEncoder 来更好地理解:

    >>> pd.get_dummies(df1)
       W_a  W_b  X_a  X_b  X_c  Y_a  Y_c  Z_b  Z_c
    0    1    0    0    1    0    0    1    0    1
    1    0    1    1    0    0    1    0    1    0
    2    1    0    0    0    1    1    0    1    0
    

    问题是为什么你只想得到 3 列?

    【讨论】:

    • 我真正需要的不是区分 W、X、Y 和 Z……我的输出应该是三列(a、b、c)。在示例中,我只有 3 行数据,但有数千行。
    • 我编辑了这个问题,看看它是否能更好地解释
    猜你喜欢
    • 2019-03-25
    • 2019-07-27
    • 2016-03-14
    • 2018-10-06
    • 2020-07-30
    • 2016-06-18
    • 2015-09-04
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多