python - 如何在python中以基于行的方式对列表值进行一个热编码?
问题描述
为了解释我想要做什么,我展示了这个例子。
一开始我的数据是这样的。
数据1)
A 列:0、1、2(共 3 个类)
B 列:0、1、2(共 3 个类)
A B
1 1
0 0
2 1
然后我对 A 列和 B 列进行了一次热编码。在一次热编码之后,我的数据看起来像这样。
数据2)
Index col1 col2 col3 col4 col5 col6
0 0 1 0 0 1 0
1 1 0 0 1 0 0
2 0 0 1 1 0 0
假设我有很多数据,比如data2。然后,我想对数据帧 data2 进行一次热编码。在这种情况下,索引 0、1、2 的值在 data2 中彼此不同。因此,如果我对 data2 进行一次热编码,那么我的结果应该是
数据3)
Index col1 col2 col3
0 1 0 0
1 0 1 0
2 0 0 1
像这样。
我怎样才能在python中做到这一点?换句话说,我想对数据帧中的每个元素进行一次热编码
解决方案
根据您想要编码各种可能的行序列的预感,您可以执行以下操作:
import pandas as pd
df=pd.DataFrame({'A':[1,0,2],'B':[1,0,1]})
In [40]: df
Out[40]:
A B
0 1 1
1 0 0
2 2 1
A_oh = pd.get_dummies(df.A,prefix='A')
B_oh = pd.get_dummies(df.B,prefix='B')
df_oh = pd.concat([A_oh,B_oh],axis=1)
In [41]: df_oh
Out[41]:
A_0 A_1 A_2 B_0 B_1
0 0 1 0 0 1
1 1 0 0 1 0
2 0 0 1 0 1
df_concat = df_oh.apply(lambda r:str(''.join(str(r[col]) for col in df_oh.columns)),axis=1)
df_concat
Out[37]:
0 01001
1 10010
2 00101
dtype: object
pd.get_dummies(df_concat)
Out[39]:
00101 01001 10010
0 0 1 0
1 0 0 1
2 1 0 0
推荐阅读
- javascript - Angular/Javascript Luxon - 将时间戳更改时间转换为当前用户时区
- javascript - Express / Ajax / Axios / 获取 dom 操作所需的信息时遇到问题
- vuejs2 - 在 Vuex 中的对象数组上使用 v-bind
- c# - 在 TFS 服务器中构建解决方案无法从外部 NuGet 源中找到程序集
- python - 如何按一天中的小时对时间序列进行分组?
- javascript - 从具有角度和 css 的数组数组创建自定义网格
- parse-platform - 解析 JS SDK:包大小
- android - 手机锁定时应用内通知不会显示
- actions-on-google - 将 Google Action 提交到生产环境时,您必须先进行 alpha/beta 吗?
- netlify - 使用 Netlify 函数进行服务器端渲染