我有这个数据框:
column1 column2 column3 column4
0 A A D D
1 B B D D
2 C C B D
3 A D D A
我想将columns1-columns4中的类别作为新列添加到数据框,并用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)
我从列1得到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代表所有出现。你能帮我么 :)
最佳答案
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)
关于python - 如何使用get_dummies从现有列创建新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54451491/