Đây là câu hỏi tiếp theo cho this one, trong đó jezrael sử dụng pandas.DataFrame.groupby để tăng thêm một yếu tố hàng trăm tốc độ tạo danh sách. Cụ thể, chúng ta hãy df
là một dataframe lớn, sau đóTại sao nhóm lại quá nhanh?
index = list(set(df.index))
list_df = [df.loc(x) for x in index]
và
list_df = [x for i,x in df.groupby(level=0, sort=False)]
tạo ra kết quả tương tự, với thứ hai là nhanh hơn so với trước đây hơn 200 lần, thậm chí bỏ qua bước tạo danh sách. Tại sao?
Tôi sẽ rất vui nếu có ai đó có thể cho tôi hiểu lý do tại sao có sự khác biệt lớn về hiệu suất. Cảm ơn trước!
Chỉnh sửa: theo đề xuất của Alex Riley trong nhận xét của mình, tôi xác nhận rằng các thử nghiệm đã được chạy trên một khung dữ liệu với chỉ mục không độc nhất và không đơn điệu.
Tôi tin rằng thế nào là thú vị hơn lý do tại sao. –
Dường như bạn có chỉ mục không phải duy nhất, có thể cũng không phải là đơn điệu. Trong những trường hợp thoái hóa như vậy, với mỗi cuộc gọi đến 'loc', tôi tin rằng gấu trúc phải lặp qua chỉ mục * toàn bộ * để xây dựng một mảng mới (có cùng độ dài với chỉ mục) để sử dụng cho việc lập chỉ mục boolean. OTOH, 'groupby' chỉ quét chỉ mục một lần và theo dõi các vị trí số nguyên cho mỗi nhãn. Tôi phải kiểm tra kỹ mọi thứ trong nguồn để chắc chắn. –