2015-04-26 22 views
6

Tôi có một tờ excel mà trông giống như vậy:groupby kết quả cho từ điển của danh sách

Column1 Column2 Column3 
0  23  1 
1  5  2 
1  2  3 
1  19  5 
2  56  1 
2  22  2 
3  2  4 
3  14  5 
4  59  1 
5  44  1 
5  1  2 
5  87  3 

Và tôi đang tìm cách để trích xuất dữ liệu đó, nhóm nó theo cột 1, và thêm nó vào một từ điển để nó xuất hiện như thế này:

{0: [1], 
1: [2,3,5], 
2: [1,2], 
3: [4,5], 
4: [1], 
5: [1,2,3]} 

Đây là mã của tôi cho đến nay

excel = pandas.read_excel(r"e:\test_data.xlsx", sheetname='mySheet', parse_cols'A,C') 
myTable = excel.groupby("Column1").groups 
print myTable 

Tuy nhiên, sản lượng của tôi trông như thế này:

{0: [0L], 1: [1L, 2L, 3L], 2: [4L, 5L], 3: [6L, 7L], 4: [8L], 5: [9L, 10L, 11L]} 

Cảm ơn!

Trả lời

5

Bạn có thể groupby trên Column1 và sau đó lấy Column3 đến apply(list) và gọi to_dict?

In [81]: df.groupby('Column1')['Column3'].apply(list).to_dict() 
Out[81]: {0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]} 
+0

Điều đó chắc chắn sẽ làm điều đó! Cảm ơn bạn! – SuperDougDougy

+0

Bit có nghĩa là chấp nhận câu trả lời này khi @ EdChum là giống hệt nhau và đã được đăng 3 phút trước đó. – LondonRob

2

Theo the docs, các GroupBy.groups:

là một dict có phím là nhóm độc đáo tính và tương ứng với giá trị là nhãn trục thuộc mỗi nhóm.

Nếu bạn muốn các giá trị bản thân, bạn có thể groupby 'COLUMN1' và sau đó gọi apply và vượt qua list phương pháp để áp dụng cho từng nhóm.

Sau đó bạn có thể chuyển nó sang một dict như mong muốn:

In [5]: 

dict(df.groupby('Column1')['Column3'].apply(list)) 
Out[5]: 
{0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]} 

(Lưu ý: có một cái nhìn tại this SO question cho lý do tại sao những con số được theo sau bởi L)

+0

Cảm ơn rất nhiều vì phản hồi! – SuperDougDougy

+0

@SuperDougDougy bạn có thể upvote ngay bây giờ ;-) – EdChum

Các vấn đề liên quan