2016-09-07 15 views
7

tôi đã nhận thấy rằng có một số công dụng của pd.DataFrame.groupby tiếp theo là một apply ngầm giả định rằng groupbystable - có nghĩa là, nếu mộtb là trường hợp của cùng một nhóm, và trước nhóm, một xuất hiện trước b, sau đó a cũng sẽ xuất hiện trước b sau khi nhóm.Pandas.DataFrame.groupby có được bảo đảm ổn định không?

Tôi nghĩ rằng có một số câu trả lời rõ ràng ngầm sử dụng điều này, nhưng, để cụ thể, đây là one using groupby+cumsum.

Có điều gì thực sự hứa hẹn hành vi này không? Tài liệu chỉ nêu rõ:

Chuỗi nhóm sử dụng công cụ lập bản đồ (dict hoặc chức năng chính, áp dụng chức năng cho nhóm, kết quả trả về dạng chuỗi) hoặc theo một loạt cột.

Ngoài ra, gấu trúc có chỉ mục, chức năng về mặt lý thuyết cũng có thể đạt được mà không cần đảm bảo này (mặc dù theo cách cồng kềnh hơn).

+0

Xin lỗi bạn đang hỏi 2 hàng có nói 'a' và' b' có cùng giá trị được đảm bảo theo thứ tự sau khi nhóm không? Tôi chắc chắn rằng tôi đã nhìn thấy trong khi bước qua các mã mà họ thực hiện ổn định-loại tôi phải tìm lại này – EdChum

+0

@EdChum Có, nếu tôi hiểu bạn một cách chính xác. Nếu các hàng * a * và * b * tương đương với tiêu chí nhóm (chúng sẽ kết thúc trong cùng một nhóm), chúng có được bảo đảm * để giữ lại nhóm bài đăng thứ tự của chúng không. Tôi đã luôn luôn nhìn thấy nó trong thực tế, nhưng nó là một chút đáng lo ngại rằng các tài liệu dường như không đảm bảo điều này. –

+0

Tôi luôn thấy hành vi này và chưa bao giờ thấy bất kỳ hành vi nào khác, thực tế là các tài liệu không chỉ định hoặc đảm bảo điều này không làm phiền tôi, nhưng tôi đã thấy trong khi bước qua rất nhiều bình luận và tham chiếu đến thực hiện ổn định và điều này có ý nghĩa hợp lý với tôi bởi vì thay thế sẽ chỉ là thực hiện các chức năng như 'biến đổi' một cơn đau để kết hợp lại chỉ mục df orig nếu nhóm quyết định thay đổi thứ tự ban đầu – EdChum

Trả lời

6

Mặc dù tài liệu không tuyên bố nội bộ này, tài liệu sử dụng sắp xếp ổn định khi tạo nhóm.

Xem:

Như tôi đã đề cập trong các ý kiến, điều này rất quan trọng nếu bạn xem xét transform mà sẽ trả về một Series với chỉ số của nó liên kết với df gốc . Nếu việc sắp xếp không giữ được thứ tự, thì điều này sẽ làm cho căn chỉnh thực hiện công việc bổ sung vì nó sẽ cần sắp xếp Series trước khi gán. Trong thực tế, điều này được đề cập in the comments:

_algos.groupsort_indexer cụ đếm loại và nó là ít nhất O(ngroups), nơi

ngroups = prod(shape)

shape = map(len, keys)

Đó là, tuyến tính trong số kết hợp (sản phẩm Descartes) của các giá trị độc đáo của các khóa nhóm . Điều này có thể rất lớn khi thực hiện nhiều nhóm chính. np.argsort(kind='mergesort')O(count x log(count)) trong đó đếm là chiều dài của khung dữ liệu; Cả hai thuật toán đều là ổn định sắp xếp và điều đó là cần thiết cho tính đúng đắn của các hoạt động nhóm .

ví dụ:xem xét: df.groupby(key)[col].transform('first')

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