【问题标题】:Create dummy variable of multiple columns with python用python创建多列的虚拟变量
【发布时间】:2019-08-06 13:14:04
【问题描述】:

我正在使用包含两列 ID 号的数据框。为了进一步研究,我想为这些 ID 号(带有两个 ID 号)制作一种虚拟变量。但是,我的代码不会合并两个数据框中的列。如何合并两个数据框中的列并创建虚拟变量?

数据框

import pandas as pd
import numpy as np
d = {'ID1': [1,2,3], 'ID2': [2,3,4]}
df = pd.DataFrame(data=d)

当前代码

pd.get_dummies(df, prefix = ['ID1', 'ID2'], columns=['ID1', 'ID2'])

期望的输出

p = {'1': [1,0,0], '2': [1,1,0], '3': [0,1,1], '4': [0,0,1]}
df2 = pd.DataFrame(data=p)
df2

【问题讨论】:

    标签: python pandas variables dummy-variable


    【解决方案1】:

    如果需要输出中的指标使用max,如果需要计数值在get_dummies 之后使用sum 和另一个参数并将值转换为字符串:

    df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').max(level=0, axis=1)
    #count alternative 
    #df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').sum(level=0, axis=1)
    print (df)
       1  2  3  4
    0  1  1  0  0
    1  0  1  1  0
    2  0  0  1  1
    

    【讨论】:

      【解决方案2】:

      给猫剥皮的不同方法;这是我的做法——使用额外的groupby

      # pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum()
      pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).max()
      
         1  2  3  4
      0  1  1  0  0
      1  0  1  1  0
      2  0  0  1  1
      

      另一个选项是stacking,如果你喜欢简洁:

      # pd.get_dummies(df.stack()).sum(level=0)
      pd.get_dummies(df.stack()).max(level=0)
      
         1  2  3  4
      0  1  1  0  0
      1  0  1  1  0
      2  0  0  1  1
      

      【讨论】:

        猜你喜欢
        • 2021-09-13
        • 1970-01-01
        • 2015-01-29
        • 2015-08-11
        • 1970-01-01
        • 2023-03-27
        • 2019-03-18
        • 2021-06-25
        • 2018-04-06
        相关资源
        最近更新 更多