首页 > 解决方案 > 转换热编码

问题描述

我有这个数据;

ID   Month
001  June
001  July
001  August
002  July

我希望结果是这样的:

ID   June  July  August
001   1     1      1
002   0     1      0

我试过one-hot编码,我的查询是这样的:

one_hot = pd.get_dummies(frame['month'])
frame = frame.drop('Month',axis = 1)
frame = frame.join(one_hot)

然而,结果是这样的

ID   June  July  August
001   1     0      0
001   0     1      0
001   0     0      1
002   0     1      0

我可以知道我的查询的哪一部分是错误的吗?

标签: pythonpandasnumpytransformone-hot-encoding

解决方案


get_dummies返回严格的 1-hot 编码值,您可以使用pd.crosstab

>>> out = pd.crosstab(df.ID, df.Month)
>>> out

Month  August  July  June
ID
1           1     1     1
2           0     1     0

要保留月份的出现顺序,您可以reindex

>>> out.reindex(df.Month.unique(), axis=1)

Month  June  July  August
ID
1         1     1       1
2         0     1       0

如果一个 ID 可以关联超过 1 个月,并且您希望将其视为 1:

out = out.ne(0).astype(int)

之后可以使用。


推荐阅读