如何从包含集合的 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”样式?的主要内容,如果未能解决你的问题,请参考以下文章

红移。我们如何(动态地)将表从列转置为行?

更改 Google 表格布局的公式:转置和拆分

oracle sql 11G中如何将列转置为行

将列转置为行 SQL Server

oracle如何在没有UNION的情况下将列转置为行

如何从列转置到行?