Với dataframe sauPandas sắp xếp theo nhóm tổng hợp và cột
In [31]: rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2,
'B': rand.randn(6),
'C': rand.rand(6) > .5})
In [32]: df
Out[32]: A B C
0 foo 1.624345 False
1 bar -0.611756 True
2 baz -0.528172 False
3 foo -1.072969 True
4 bar 0.865408 False
5 baz -2.301539 True
Tôi muốn sắp xếp nó vào nhóm (A
) bằng tổng tổng hợp của B
, và sau đó bởi các giá trị trong C
(không cộng dồn) . Vì vậy, về cơ bản có được thứ tự của các A
nhóm với
In [28]: df.groupby('A').sum().sort('B')
Out[28]: B C
A
baz -2.829710 1
bar 0.253651 1
foo 0.551377 1
Và sau đó bởi True/False, để nó cuối cùng trông như thế này:
In [30]: df.ix[[5, 2, 1, 4, 3, 0]]
Out[30]: A B C
5 baz -2.301539 True
2 baz -0.528172 False
1 bar -0.611756 True
4 bar 0.865408 False
3 foo -1.072969 True
0 foo 1.624345 False
Làm thế nào điều này có thể được thực hiện?
Ngoài ra, tôi cho rằng cờ 'sort = False' của' groupby' sẽ trả về một thứ tự tùy ý, không nhất thiết phải sắp xếp (tôi đoán là tôi đã liên kết chúng với các từ điển python vì một số lý do). Nhưng câu trả lời này ngụ ý rằng cờ được bảo đảm để giữ nguyên thứ tự ban đầu của các dòng dữ liệu? – beardc
Tôi chắc chắn 99% nó giữ nguyên thứ tự của các nhóm khi chúng xuất hiện lần đầu tiên. Tôi không có bất kỳ mã nào để trả lại điều này, nhưng một số thử nghiệm nhanh chóng xác nhận trực giác này. – Zelazny7
Cảm ơn @ Zelazny7 vì câu trả lời này. Đó là chính xác những gì tôi muốn. Tuy nhiên, có vẻ như trong gói gấu trúc mới nhất, để đạt được cùng 'Out [7]', 'inplace = True' nên được thêm vào các đối số trong' Input [7] '. – MoonKnight