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

使用python创建多列的虚拟变量,python,pandas,variables,dummy-variable,Python,Pandas,Variables,Dummy Variable,我正在使用一个包含两列ID号的数据帧。为了进一步的研究,我想对这些ID号(有两个ID号)做一种虚拟变量。但是,我的代码不会合并两个数据帧中的列。如何合并两个数据帧中的列并创建虚拟变量 数据帧 当前代码 所需输出 给猫剥皮的不同方式;下面是我如何使用附加的groupby: # pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum() pd.get_dummies(df.astype(str)).g

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

数据帧

当前代码

所需输出


给猫剥皮的不同方式;下面是我如何使用附加的
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
ing,如果您喜欢简洁:

# 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

如果输出中需要指示器使用
max
,如果需要计数值使用
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
# 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
# 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
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