Tôi thường xuyên sử dụng chức năng agg()
của gấu trúc được sử dụng để chạy thống kê tóm tắt trên mỗi cột của một data.frame. Ví dụ: dưới đây là cách bạn tạo ra độ lệch trung bình và tiêu chuẩn:Python Pandas: Là thứ tự được bảo quản khi sử dụng groupby() và agg()?
df = pd.DataFrame({'A': ['group1', 'group1', 'group2', 'group2', 'group3', 'group3'],
'B': [10, 12, 10, 25, 10, 12],
'C': [100, 102, 100, 250, 100, 102]})
>>> df
[output]
A B C
0 group1 10 100
1 group1 12 102
2 group2 10 100
3 group2 25 250
4 group3 10 100
5 group3 12 102
Trong cả hai trường hợp đó, thứ tự các hàng riêng lẻ được gửi đến chức năng tăng không quan trọng. Nhưng hãy xem xét ví dụ sau, trong đó:
df.groupby('A').agg([np.mean, lambda x: x.iloc[1] ])
[output]
mean <lambda> mean <lambda>
A
group1 11.0 12 101 102
group2 17.5 25 175 250
group3 11.0 12 101 102
Trong trường hợp này hàm lambda như dự định, xuất hàng thứ hai trong mỗi nhóm. Tuy nhiên, tôi đã không thể tìm thấy bất cứ điều gì trong tài liệu gấu trúc ngụ ý rằng điều này được đảm bảo là đúng trong mọi trường hợp. Tôi muốn sử dụng agg()
cùng với chức năng trung bình có trọng số, vì vậy tôi muốn chắc chắn rằng các hàng đi vào chức năng sẽ theo thứ tự giống như chúng xuất hiện trong khung dữ liệu gốc.
Có ai biết, lý tưởng thông qua một nơi nào đó trong tài liệu hoặc mã nguồn của gấu trúc, nếu điều này được đảm bảo đúng không?
Vâng, tôi không thể nhìn thấy bất kỳ đảm bảo rằng trật tự được bảo quản trong các tài liệu, vì vậy nó không có vẻ một chút khôn ngoan khi dựa vào nó. Nếu thứ tự được phản ánh bởi cột 'B' của bạn thì bạn có thể sắp xếp từng nhóm bằng' B' trong lambda để chắc chắn. – Marius
Thật không may là tôi muốn giữ các hàng được sắp xếp theo một cột không có trong tập hợp. Khung dữ liệu được sắp xếp trước cuộc gọi 'agg()', do đó, nó chỉ là một vấn đề nếu nó sắp xếp lại nó như một phần của 'groupby()'. – BringMyCakeBack