首页 > 解决方案 > 熊猫:将数组列分解为一系列二进制列?

问题描述

给定这样的数据:

df = pd.DataFrame([
    { 'vals': ['foo', 'bar'], 'id': 100 },
    { 'vals': ['foo', 'bar', 'baz'], 'id': 101 },
    { 'vals': ['bar'], 'id': 102 },
    { 'vals': ['foo'], 'id': 103 }  
])

有什么办法可以将其制成如下结构的数据框:

id    foo    bar    baz
100   true   true   false
101   true   true   true
102   false  true   false
103   true   false  false

标签: pandas

解决方案


使用MultiLabelBinarizer并强制转换为布尔值和join所有列而不vals提取pop

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df =df.join(pd.DataFrame(mlb.fit_transform(df.pop('vals')),columns=mlb.classes_).astype(bool))
print (df)

    id    bar    baz    foo
0  100   True  False   True
1  101   True   True   True
2  102   True  False  False
3  103  False  False   True

推荐阅读