Pandas: 将单列内的列表转换为多列

Pandas: Convert lists within a single column to multiple columns

我有一个数据框,其中包含多个属性以逗号分隔的列:

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]),但是无法找到一种方法来确定给定行是否具有特定属性,而无需对每个属性进行逐行迭代.有更好的方法吗?

您可以使用 get_dummies, cast 1 and 0 to boolean by astype and last concatid:

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