2015-03-04 28 views
7

Tôi có một dòng mã:Python Pandas groupby có được danh sách các nhóm

g = x.groupby('Color') 

Những màu sắc là đỏ, xanh, xanh, vàng, tím, da cam, và đen. Làm cách nào để tôi trả lại danh sách này? Đối với các thuộc tính tương tự, tôi sử dụng x.Attribute và nó hoạt động tốt, nhưng x.Color không hoạt động theo cùng một cách.

+0

Vì vậy, bạn muốn có danh sách các giá trị duy nhất trong Màu? –

+1

Bạn có thể nhận được các giá trị duy nhất từ ​​orig df của bạn, không cần phải nhóm 'x ['Color']. Unique()' – EdChum

+1

The x ['Color'] duy nhất kết thúc là chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn. – user3745115

Trả lời

1

Đây là cách thực hiện.

groups = list() 
for g, data in x.groupby('Color'): 
    print(g, data) 
    groups.append(g) 

Ý tưởng cốt lõi ở đây là thế này: nếu bạn lặp qua một iterator dataframe groupby, bạn sẽ nhận lại một hai tuple của (tên nhóm, khung dữ liệu đã lọc), nơi khung dữ liệu đã lọc chỉ chứa các hồ sơ tương ứng cho nhóm đó).

+2

Ngoài ra, nếu bạn muốn nhận được các giá trị duy nhất có trong mỗi cột, bạn có thể thực hiện 'numpy.unique (x [col_name] .values)' – ericmjl

3

Tôi hiểu rằng bạn có Khung dữ liệu chứa cột bội số. Một trong các cột là "Màu" có các loại màu khác nhau. Bạn muốn trả về một danh sách các màu duy nhất tồn tại.

colorGroups = df.groupby(['Color']) 
for c in colorGroups.groups: 
    print c 

Mã trên sẽ cung cấp cho bạn tất cả các màu tồn tại mà không lặp lại tên màu. Do đó, bạn sẽ nhận được kết quả như:

Red 
Blue 
Green 
Yellow 
Purple 
Orange 
Black 

Chức năng unique() trả về một mảng của tất cả các giá trị duy nhất trong một Series. Vì vậy để có được một mảng của tất cả các màu sắc độc đáo, bạn sẽ làm gì:

df['Color'].unique() 

Đầu ra là một mảng, ví dụ như vậy print df['Color'].unique()[3] sẽ cung cấp cho bạn Yellow.

14

Có cách dễ dàng hơn nhiều để làm việc đó:

g = x.groupby('Color') 

g.groups.keys() 

Bằng cách groupby() gấu trúc trả về cho bạn một dict của nhóm DFS. Bạn có thể dễ dàng lấy danh sách khóa của dict này bằng python được xây dựng trong hàm keys().

+0

Điều này còn đáng giá hơn các câu trả lời khác. :) – Peaceful

5

Tôi muốn thêm nhận xét này làm nhận xét cho câu trả lời của Yanqi Ma, nhưng tôi chưa có nhận xét nào về nhận xét.

Nếu bạn không quan tâm đến thứ tự của các nhóm, câu trả lời sẽ làm việc tốt:

g = x.groupby('Color') 
g.groups.keys() 
list(g.groups) # or this 

Tuy nhiên, lưu ý rằng g.groups là một cuốn từ điển, vì vậy các phím vốn dĩ không có thứ tự! Đây là trường hợp ngay cả khi bạn sử dụng sort=True theo phương pháp groupby để sắp xếp các nhóm theo mặc định. Điều này thực sự bit tôi khó khăn khi nó dẫn đến một thứ tự khác nhau trên hai nền tảng, đặc biệt là kể từ khi tôi đã sử dụng mẫu thứ hai ở trên, do đó, nó không được rõ ràng lúc đầu rằng g.groups là một dict.

Theo tôi, cách tốt nhất để làm điều này là để tận dụng thực tế là GroupBy object has an iterator, và sử dụng một danh sách hiểu để trả lại nhóm theo thứ tự chúng tồn tại trong đối tượng groupby:

g = x.groupby('Color') 
groups = [name for name,unused_df in g] 

Đó là một chút ít có thể đọc được, nhưng điều này sẽ luôn luôn trả lại các nhóm theo thứ tự đúng.

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