反向 get_dummies()
Reverse get_dummies()
使用 get_dummies()
将分类数据转换为数值数据后,我的数据框如下所示
score1 score2 country_CN country _AU category_leader category_
0.89. 0.45. 0. 1. 0 1
0.55. 0.54 1. 0 1 0
如您所见,转换后的分类列为数字列 country_CN country _AU category_leader category_
我想将它带到它的原始数据框,如下所示:
score1 score2 country category_leader
0.89. 0.45. AU
0.55. 0.54 CN leader
我已尝试使用此处列出的建议:
但到目前为止还没有运气。
任何帮助/线索?
您可以先将虚拟列转换为索引 DataFrame.set_index
:
#
df = undummify(df.set_index(['score1','score2'])).reset_index()
或使用 DataFrame.melt
, fiter rows with boolean indexing
, splitting by Series.str.split
and last pivoting by DataFrame.pivot
的替代解决方案:
df1 = df.melt(['score1','score2'])
df1 = df1[df1['value'].eq(1)]
df1[['a','b']] = df1.pop('variable').str.split('_', expand=True)
df1 = df1.pivot(index=['score1','score2'], columns='a', values='b').reset_index()
print (df1)
a score1 score2 category country
0 0.55 0.54 leader CN
1 0.89 0.45 AU
使用 get_dummies()
score1 score2 country_CN country _AU category_leader category_
0.89. 0.45. 0. 1. 0 1
0.55. 0.54 1. 0 1 0
如您所见,转换后的分类列为数字列 country_CN country _AU category_leader category_
我想将它带到它的原始数据框,如下所示:
score1 score2 country category_leader
0.89. 0.45. AU
0.55. 0.54 CN leader
我已尝试使用此处列出的建议:
但到目前为止还没有运气。
任何帮助/线索?
您可以先将虚拟列转换为索引 DataFrame.set_index
:
#
df = undummify(df.set_index(['score1','score2'])).reset_index()
或使用 DataFrame.melt
, fiter rows with boolean indexing
, splitting by Series.str.split
and last pivoting by DataFrame.pivot
的替代解决方案:
df1 = df.melt(['score1','score2'])
df1 = df1[df1['value'].eq(1)]
df1[['a','b']] = df1.pop('variable').str.split('_', expand=True)
df1 = df1.pivot(index=['score1','score2'], columns='a', values='b').reset_index()
print (df1)
a score1 score2 category country
0 0.55 0.54 leader CN
1 0.89 0.45 AU