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

问题描述 投票:3回答:2

我正在使用包含两个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
2个回答
2
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.