两个不同数据框列的一个热编码
One Hot Encoding For Two Different Dataframe Columns
我有一个 ID 变量为 Toy 的数据框,并且 Toy 有不同的配色方案 -
input_data = pd.DataFrame({'Toy': ['Toy1', 'Toy2', 'Toy3','Toy4'],
'Color1': ['Red', 'Orange', '', 'Orange'],
'Color2': ['Red', '', 'Blue', 'Red']})
我想对 Color1 和 Color2 变量进行单热编码,但只有一个转换变量(没有任何前缀的颜色名称)
output_data = pd.DataFrame({'Toy': ['Toy1', 'Toy2', 'Toy3', 'Toy4'],
'Red': [1, 0, 0, 1],
'Blue': [0, 0, 1, 0],
'Orange': [0, 1, 0, 1]})
这似乎是一种快速简便的输出,但我无法找到一种直接的方法。非常感谢任何潜在客户。
我认为没有直接的选择。您可以重塑并使用 crosstab
:
d = input_data.replace('', float('nan')).melt(id_vars='Toy')
out = (pd.crosstab(d['Toy'],d['value'])
.clip(upper=1)
.reset_index().rename_axis(index=None, columns=None)
)
输出:
Toy Blue Orange Red
0 Toy1 0 0 1
1 Toy2 0 1 0
2 Toy3 1 0 0
3 Toy4 0 1 1
将 Series.str.get_dummies
与 |
的联合值一起使用:
df = input_data.set_index('Toy').agg('|'.join, 1).str.get_dummies().reset_index()
print (df)
Toy Blue Orange Red
0 Toy1 0 0 1
1 Toy2 0 1 0
2 Toy3 1 0 0
3 Toy4 0 1 1
我有一个 ID 变量为 Toy 的数据框,并且 Toy 有不同的配色方案 -
input_data = pd.DataFrame({'Toy': ['Toy1', 'Toy2', 'Toy3','Toy4'],
'Color1': ['Red', 'Orange', '', 'Orange'],
'Color2': ['Red', '', 'Blue', 'Red']})
我想对 Color1 和 Color2 变量进行单热编码,但只有一个转换变量(没有任何前缀的颜色名称)
output_data = pd.DataFrame({'Toy': ['Toy1', 'Toy2', 'Toy3', 'Toy4'],
'Red': [1, 0, 0, 1],
'Blue': [0, 0, 1, 0],
'Orange': [0, 1, 0, 1]})
这似乎是一种快速简便的输出,但我无法找到一种直接的方法。非常感谢任何潜在客户。
我认为没有直接的选择。您可以重塑并使用 crosstab
:
d = input_data.replace('', float('nan')).melt(id_vars='Toy')
out = (pd.crosstab(d['Toy'],d['value'])
.clip(upper=1)
.reset_index().rename_axis(index=None, columns=None)
)
输出:
Toy Blue Orange Red
0 Toy1 0 0 1
1 Toy2 0 1 0
2 Toy3 1 0 0
3 Toy4 0 1 1
将 Series.str.get_dummies
与 |
的联合值一起使用:
df = input_data.set_index('Toy').agg('|'.join, 1).str.get_dummies().reset_index()
print (df)
Toy Blue Orange Red
0 Toy1 0 0 1
1 Toy2 0 1 0
2 Toy3 1 0 0
3 Toy4 0 1 1