2016-05-16 195 views
5

我有一個數據幀,包括用逗號分隔的多個屬性列:大熊貓:一列中列出了轉換的多個列

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])很容易的,但不能想出一個辦法來確定給定行是否有沒有行由行重複中的每個特定屬性屬性。有一個更好的方法嗎?

回答

8

您可以使用get_dummies,投10booleanastype和最後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