【问题标题】:one hot encoding with multiple categorical values per row in pythonpython中每行具有多个分类值的一种热编码
【发布时间】:2019-02-03 11:18:58
【问题描述】:

我想在 python 3 中为分类特征实现一种热编码。 我注意到很少有 id 有一个以上的分类值。

我的桌子:

id  type
13   A
13   B
2    A
34   C
34   A
34   B

我的愿望输出:

id  type@A  type@B  type@C
13     1      1       0
2      1      0       0
34     1      1       1

我能做什么?

【问题讨论】:

    标签: python one-hot-encoding


    【解决方案1】:

    如果您可以使用 pandas,请将数据存储在数据框中(例如名称 df)并使用:

    pd.crosstab(df['id'],df['type']).rename_axis(None,axis=1)
    

    下面的例子:

    import pandas as pd
    d={'id': {0: 13, 1: 13, 2: 2, 3: 34, 4: 34, 5: 34},
    'type': {0: 'A', 1: 'B', 2: 'A', 3: 'C', 4: 'A', 5: 'B'}}
    df=pd.DataFrame(d)
    print(df)
    
       id type
    0  13    A
    1  13    B
    2   2    A
    3  34    C
    4  34    A
    5  34    B
    

    使用pd.crosstab()

    df_new = pd.crosstab(df['id'],df['type']).rename_axis(None,axis=1).add_prefix('type@')
    print(df_new)
    
         type@A  type@B  type@C
    id                        
    2        1       0       0
    13       1       1       0
    34       1       1       1
    

    【讨论】:

    • 我编辑了我的问题。我需要它是 type@A 作为 col 名称。使用您的解决方案,我得到了很多行,有问题。
    • 我已经编辑了列名以匹配您想要的输出。你所说的“很多行”是什么意思,你能在你的问题中证明这一点。谢谢
    • 我将“期望输出”更改为我正在寻找的内容。你能改变你的解决方案来匹配它吗?
    • @anat 相同的代码仍然有效,您能否仅使用您发布的数据重新检查。我已经发布了我通过您编辑的问题获得的数据。
    • 您是否关心行的顺序?意思是id 2 在13 之前是这个问题吗?
    猜你喜欢
    • 2018-11-04
    • 2018-12-17
    • 1970-01-01
    • 2022-06-21
    • 2023-03-06
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多