熊猫:将单个列中的列表转换为多列

时间:2016-05-16 20:10:10

标签: python pandas dataframe categorical-data

我的数据框包含多个以逗号分隔的属性的列:

df = pd.DataFrame({'id': [1,2,3], 'labels' : ["a,b,c", "c,a", "d,a,b"]})

   id   labels
0   1   a,b,c
1   2   c,a
2   3   d,a,b

(我知道这不是一个理想的情况,但数据来自外部源。)我想将多属性列转换为多个列,每个标签一个,这样我就可以将它们视为分类变量。期望的输出:

    id  a       b       c       d   
0    1  True    True    True    False   
1    2  True    False   True    False   
2    3  True    True    False   True

我可以非常轻松地获取所有可能属性([a,b,c,d])的集合,但无法找出确定给定行是否具有特定属性的方法,而不对每个属性进行逐行迭代。有更好的方法吗?

1 个答案:

答案 0 :(得分:8)

您可以在get_dummies和最后astype1之后使用concat,强制0booleanid

print df['labels'].str.get_dummies(sep=',').astype(bool)
      a      b      c      d
0  True   True   True  False
1  True  False   True  False
2  True   True  False   True

print pd.concat([df.id, df['labels'].str.get_dummies(sep=',').astype(bool)], axis=1)

   id     a      b      c      d
0   1  True   True   True  False
1   2  True  False   True  False
2   3  True   True  False   True