使用python创建多列的虚拟变量

时间:2019-03-15 12:43:29

标签: python pandas variables dummy-variable

我正在使用一个包含两列具有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

2 个答案:

答案 0 :(得分: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

如果您想简洁明了,另一个选择是stack

# 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

答案 1 :(得分:2)

如果输出中的需要指示器使用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