【问题标题】:How to create new columns from existing columns with get_dummies如何使用 get_dummies 从现有列创建新列
【发布时间】:2019-06-24 09:03:32
【问题描述】:

我有这个数据框:

    column1   column2   column3   column4
0     A          A         D         D
1     B          B         D         D 
2     C          C         B         D
3     A          D         D         A 

我想将列 1 - 列 4 中的类别作为新列添加到数据框中,并用 1 和 0 填充,如下所示:

    column1   column2   column3   column4   A     B     C     D
0     A          A         D         D      1     0     0     1
1     B          B         D         D      0     1     0     1
2     C          C         B         D      0     1     1     1
3     A          D         D         A      1     0     0     1

所以我尝试了一些代码:

pd.concat([df, df['column1'].str.get_dummies(sep=',')], axis=1)

我从 column1 中得到 1 和 0。如何修改我的代码以获取所有 1 和 0 条件是:

0 & 0 = 0
0 & 1 = 1
1 & 0 = 1
1 & 1 = 1

我也试过了:

df1 = df.column1.str.get_dummies(sep=',')
df2 = df.column2.str.get_dummies(sep=',') 
df3 = df.column3.str.get_dummies(sep=',') 
df4 = df.column4.str.get_dummies(sep=',') 
frames = [df1, df2, df3, df4]
result = pd.concat(frames, sort=True)

但我希望类别仅作为新列出现一次,值 1 应代表所有出现。你能帮我吗:)

【问题讨论】:

    标签: python pandas dataframe machine-learning


    【解决方案1】:

    get_dummies 方法根据系列的值计算类别的数量,因此需要从您提取虚拟对象的系列的值(在您的情况下为列)包含您想要的所有类别要获得,换句话说,您必须有一列包含所有 4 列的值并用分隔符连接。为了将这些值放在一起,我们使用:

    new_col = df[['column1', 'column2', 'column3', 'column4']].apply(lambda x: '|'.join(x), axis=1)
    

    它基本上用“|”将所有列值连接成一个字符串分隔符按行获得这个系列:

    0    A|A|D|D
    1    B|B|D|D
    2    C|C|B|D
    3    A|D|D|A
    

    现在我们只需将get_dummies(sep='|') 方法应用于上述列,以获得考虑到这些列中存在的所有类别的虚拟变量,在一行代码中可以获得(我也将它与原始数据集以获得您要求的格式):

    df = pd.concat([df, df[['column1', 'column2', 'column3', 'column4']]
           .apply(lambda x: '|'.join(x), axis=1)
           .str
           .get_dummies(sep='|')], axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2020-09-18
      • 2018-09-24
      相关资源
      最近更新 更多