【问题标题】:How to transpose and transform to "one-hot-encode" style from a pandas column containing a set?如何从包含集合的 pandas 列转置和转换为“one-hot-encode”样式?
【发布时间】: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

标签: python pandas numpy scikit-learn sklearn-pandas


【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2019-01-05
      • 2018-03-18
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2023-03-13
      • 2022-01-22
      • 2016-11-15
      相关资源
      最近更新 更多