2013-07-30 30 views
11

Trong đoạn mã sau datapandas.DataFrameindices là một tập hợp các cột của data. Sau khi nhóm dữ liệu với groupby Tôi quan tâm đến các id của các nhóm, nhưng chỉ những người có kích thước lớn hơn một ngưỡng (nói: 3).Nhóm gấu trúc: nhận kích thước của một nhóm biết id của nó (từ .grouper.group_info [0])

group_ids=data.groupby(list(data.columns[list(indices)])).grouper.group_info[0] 

Bây giờ, làm cách nào để tìm nhóm nào có kích thước lớn hơn hoặc bằng 3 biết id của nhóm? Tôi chỉ muốn id của các nhóm với một kích thước nhất định.

#TODO: filter out ids from group_ids which correspond to groups with sizes < 3 
+0

đây là thách thức truy cập của nhân viên Amazon của Kaggle, phải =)) – herrfz

+0

Vâng, đúng vậy. Đó là một thế giới nhỏ bé, Eriza, phải không? ;) – piokuc

Trả lời

16

Một cách là sử dụng phương pháp size của groupby:

g = data.groupby(...) 
size = g.size() 
size[size > 3] 

Ví dụ, ở đây chỉ có một nhóm các kích thước> 1:

In [11]: df = pd.DataFrame([[1, 2], [3, 4], [1,6]], columns=['A', 'B']) 

In [12]: df 
Out[12]: 
    A B 
0 1 2 
1 3 4 
2 1 6 

In [13]: g = df.groupby('A') 

In [14]: size = g.size() 

In [15]: size[size > 1] 
Out[15]: 
A 
1 2 
dtype: int64 

Nếu bạn đã quan tâm đến việc chỉ hạn chế DataFrame đối với những nhóm lớn, bạn có thể sử dụng phương thức filter:

In [21]: g.filter(lambda x: len(x) > 1) 
Out[21]: 
    A B 
0 1 2 
2 1 6 
+0

Cảm ơn vì điều này. Tôi đã thử 'g.filter (lambda x: len (x)> 1)' nhưng nó không hiệu quả đối với tôi, tôi có ngoại lệ. Bây giờ tôi đang thử 'g.filter (g.size()> = threshold)'. Nó đã không thất bại ngay lập tức, đó là một dấu hiệu tốt, nhưng nó là chậm ... Tôi bắt đầu nó ~ 10 phút trước và nó vẫn chạy ... Tôi đã có ~ 90000 nhóm (không có bộ lọc). – piokuc

+0

@piokuc lọc yêu cầu 0,12 (không nghĩ 'g.filter (g.size()> = ngưỡng)' hiện những gì bạn nghĩ rằng nó không ...: s) –

+0

Cảm ơn rất nhiều Andy. Yeah, tôi không tin 'g.filter (g.size()> = threshold)' làm những gì tôi muốn, vì nó chỉ mất quá nhiều thời gian (nó vẫn đang chạy ... cần phải giết nó). Tôi cần phải kiểm tra phiên bản của gấu trúc tôi đang sử dụng ... – piokuc

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