如何将带有列表的列转换为一个热编码列?

问题描述 投票:0回答:1

假设有一个 DataFrame,如下所示

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'id':range(1,4), 
                   'items':[['A', 'B'], ['A', 'B', 'C'], ['A', 'C']]})
df
        id  items
        1   [A, B]
        2   [A, B, C]
        3   [A, C]

是否有一种有效的方法将上述 DataFrame 转换为以下(one-hot 编码列)?非常感谢!

   id   items       A   B   C
    1   [A, B]      1   1   0
    2   [A, B, C]   1   1   1
    3   [A, C]      1   0   1
python pandas numpy
1个回答
0
投票

一个可能的解决方案:

df.explode('items').pivot_table(index='id', columns='items', values='id', aggfunc=len, fill_value=0)

输出:

items  A  B  C
id            
1      1  1  0
2      1  1  1
3      1  0  1
© www.soinside.com 2019 - 2024. All rights reserved.