python - 转换热编码
问题描述
我有这个数据;
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
我可以知道我的查询的哪一部分是错误的吗?
解决方案
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)
之后可以使用。
推荐阅读
- python-3.x - 代码计算不正确,我无法找到我犯错的地方
- javascript - 有没有一种方法可以在 JavaScript 中以不同方式突出显示全局变量和局部变量的语法突出显示?
- android - 如何在Android中响应BottomSheetDialogFragment的外部触摸事件
- android - 无法更改活动的名称
- javascript - ngSwitch 是“属性指令”还是“结构指令”?
- javascript - 实施记录最近 5 分钟点击的点击计数器的问题
- jquery - jquery.signalr 无法识别 jquery
- gremlin - AWS 海王星日期时间()
- jquery - jquery点击函数addclass
- mysql - 从 Google 工作表插入 MySQL