Python 中的单热编码,用于 DataFrame 中的数组值

One-hot encoding in Python for array values in a DataFrame

我正在尝试对这些集群数据帧进行一次性编码。 (按长度分组)。一直在尝试使用 sklearn 的编码器,但它似乎将每一行视为一个类别而不是多个类别。

示例输入:

 ID                    trace  length
 3              [A, B, C, C]       4
 4           [A, B, C, C, D]       5
 5        [A, B, C, C, D, E]       6
 24             [A, B, C, C]       4
 25          [A, B, C, C, D]       5
 ...                     ...     ...

预期输出:

ID     A  B  C  D  E    length
3      1  1  1  0  0         4
4      1  1  1  1  0         5
5      1  1  1  1  1         6
24     1  1  1  0  0         4
25     1  1  1  1  0         5
.... ..... .. ......

IIUC,如果目标包含列表,你可以这样做:

(df.drop('trace',1)
   .join(df['trace']
         .apply('|'.join)
         .str.get_dummies()
        )
 )

df 的就地修改:

df = (df.join(df.pop('trace')
              .apply('|'.join)
              .str.get_dummies())
      )

或使用 explodepivot_table:

(df.explode('trace')
   .assign(x=1)
   .pivot_table(index=['ID', 'length'], columns='trace', values='x', aggfunc='first')
   .fillna(0, downcast='infer')
   .reset_index()
 )

输出:

   ID  length  A  B  C  D  E
0   3       4  1  1  1  0  0
1   4       5  1  1  1  1  0
2   5       6  1  1  1  1  1
3  24       4  1  1  1  0  0
4  25       5  1  1  1  1  0