【问题标题】:generate many dummies in Pandas when every observation contains a list of possible values当每个观察值都包含一个可能值列表时,在 Pandas 中生成许多假人
【发布时间】:2016-05-14 15:29:39
【问题描述】:

我有一个数据框,其中有一列看起来像:

col
A B C
B C X
U

我想生成一些虚拟变量,告诉我一行是否包含特定值。也就是说,在示例中,我想生成 5 个虚拟变量(d_A、d_B、d_C、d_X、d_U),以便数据看起来像

col      d_A      d_B      d_C      d_X      d_U
A B C    1        1        1        0        0
B C X    0        1        1        1        0
...

我有很多很多可能的值,所以我不能用手轻松地做到这一点。知道如何在 pandas 中做到这一点(在矢量化模式下)?

谢谢!

【问题讨论】:

    标签: python string pandas categorical-data dummy-variable


    【解决方案1】:

    使用str.get_dummiesjoinconcat

    print df.col.str.get_dummies(sep=' ')
       A  B  C  U  X
    0  1  1  1  0  0
    1  0  1  1  0  1
    2  0  0  0  1  0
    
    print df.join(df.col.str.get_dummies(sep=' '))
         col  A  B  C  U  X
    0  A B C  1  1  1  0  0
    1  B C X  0  1  1  0  1
    2      U  0  0  0  1  0
    

    如果您需要更改列名,请使用列表理解:

    df1 = df.col.str.get_dummies(sep=' ')
    df1.columns = ['d_' + x for x in df1.columns]
    print df1
       d_A  d_B  d_C  d_U  d_X
    0    1    1    1    0    0
    1    0    1    1    0    1
    2    0    0    0    1    0
    
    print df.join(df1)
         col  d_A  d_B  d_C  d_U  d_X
    0  A B C    1    1    1    0    0
    1  B C X    0    1    1    0    1
    2      U    0    0    0    1    0
    
    print pd.concat([df, df1], axis=1)
         col  d_A  d_B  d_C  d_U  d_X
    0  A B C    1    1    1    0    0
    1  B C X    0    1    1    0    1
    2      U    0    0    0    1    0
    

    【讨论】:

    • 非常感谢!谢谢!我猜concatstr.get_dummies 也可以
    • 是的,我也将它添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2020-07-27
    • 2020-04-02
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多