我的数据框包含多个以逗号分隔的属性的列:
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]
)的集合,但无法找出确定给定行是否具有特定属性的方法,而不对每个属性进行逐行迭代。有更好的方法吗?
答案 0 :(得分:8)
您可以在get_dummies
和最后astype
列1
之后使用concat
,强制0
和boolean
至id
:
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