如何从包含集合的 pandas 列转置和转换为“one-hot-encode”样式?
Posted
技术标签:
【中文标题】如何从包含集合的 pandas 列转置和转换为“one-hot-encode”样式?【英文标题】:How to transpose and transform to "one-hot-encode" style from a pandas column containing a set? 【发布时间】:2019-06-12 03:58:54 【问题描述】:我想像 question 一样对 pandas 列进行分解:
我想转置然后“one-hot-encode”样式。例如,取数据帧 df
Col1 Col2
C Apple, Orange, Banana
A Apple, Grape
B Banana
我想转换它并得到:
df
Col1 C A B
Apple 1 1 0
Orange 1 0 0
Banana 1 0 1
Grape 0 1 0
如何使用 pandas/Sklearn 来实现这一点?
【问题讨论】:
您可以一次性编码(如您的链接答案),然后转置df = df.T
【参考方案1】:
这是一个可能的答案(假设 Col1 是您的索引):
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
one_hot_encoded = pd.DataFrame(mlb.fit_transform(df['Col2']), columns=mlb.classes_, index=df.index)
one_hot_encoded.T
【讨论】:
【参考方案2】:您可以转换多热编码输出本身,然后创建一个数据帧。
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
pd.DataFrame(mlb.fit_transform(df['Col2']).T, columns=df.Col1, index= mlb.classes_)
输出:
Col1 C A B
Apple 1 1 0
Banana 1 0 1
Grape 0 1 0
Orange 1 0 0
注意:我们仍然不能将其称为一种热编码。它是多热编码,但采用转换形式。
Examples
【讨论】:
以上是关于如何从包含集合的 pandas 列转置和转换为“one-hot-encode”样式?的主要内容,如果未能解决你的问题,请参考以下文章