在python中从多个变量创建虚拟变量

问题描述

我无法从这样的数据集创建虚拟变量:

x = pd.DataFrame({'Temp':['Hot','Cold','Warm','Cold'],'Temp_2':[np.nan,np.nan]

请注意,两个变量(热、冷或暖)中的值相同。

    Temp    Temp_2
0   Hot     NaN
1   Cold    Warm
2   Warm    Cold
3   Cold    NaN

所以我的问题是在使用 pd.get_dummies 时,该函数没有考虑这种关系,而是独立地对两个变量进行编码。

    Temp_Cold   Temp_Hot    Temp_Warm   Temp_2_Cold      Temp_2_Warm
0       0           1           0              0               0
1       1           0           0              0               1
2       0           0           1              1               0
3       1           0           0              0               0

有什么办法可以把它编成代码,这样我就可以得到它吗?

    Cold    Hot Warm
0     0      1    0
1     1      0    1
2     1      0    1
3     1      0    0

谢谢,

解决方法

你可以这样做:

x = pd.DataFrame({'Temp':['Hot','Cold','Warm','Cold'],'Temp_2':[np.nan,np.nan]})
print(x)
a = pd.get_dummies(x,prefix=['',''])
b = a.groupby(lambda x:x,axis=1).sum()
print(b)

它不是那么干净但有效。使用前缀允许在从 temp 和 temp_2 生成的列中具有相同的名称。

   _Cold  _Hot  _Warm
0      0     1      0
1      1     0      1
2      1     0      1
3      1     0      0