2016-05-16 27 views
5

Tôi có một dataframe bao gồm cột với nhiều thuộc tính cách nhau bởi dấu phẩy:Pandas: Chuyển đổi danh sách trong một cột duy nhất để nhiều cột

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 

(Tôi biết điều này không phải là một tình hình lý tưởng , nhưng dữ liệu bắt nguồn từ một nguồn bên ngoài.) Tôi muốn biến các cột đa thuộc tính thành nhiều cột, một cột cho mỗi nhãn, để tôi có thể coi chúng là các biến phân loại. đầu ra mong muốn:

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

tôi có thể nhận các thiết lập của tất cả các thuộc tính có thể ([a,b,c,d]) khá dễ dàng, nhưng không thể tìm ra một cách để xác định liệu một dòng được đưa vào có một thuộc tính cụ thể mà không hàng-by-hàng lặp cho mỗi thuộc tính. Có cách nào tốt hơn để làm điều này?

Trả lời

8

Bạn có thể sử dụng get_dummies, đúc 10 để boolean bởi astypeconcat cột cuối cùng 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 
Các vấn đề liên quan