Khóa học
Việc tìm ra những điểm dữ liệu thú vị trong một DataFrame thường dễ hơn nếu bạn thay đổi thứ tự các hàng. Bạn có thể sắp xếp các hàng bằng cách truyền tên cột vào .sort_values().
Trong các trường hợp các hàng có cùng giá trị (điều này thường gặp nếu bạn sắp xếp theo biến phân loại), bạn có thể muốn phá vỡ thế hòa bằng cách sắp xếp theo một cột khác. Bạn có thể sắp xếp theo nhiều cột theo cách này bằng cách truyền vào một danh sách tên cột.

Sắp xếp các hàng theo giá trị cột với sort_values()
Bạn có thể thay đổi thứ tự các hàng bằng cách sắp xếp để dữ liệu thú vị nhất nằm ở đầu DataFrame.
Sắp xếp theo một cột
Ví dụ, khi chúng ta áp dụng sort_values() lên cột weight_kg của DataFrame dogs, ta được chú chó nhẹ nhất ở đầu, Stella giống Chihuahua, và chú chó nặng nhất ở cuối, Bernie giống Saint Bernard.
dogs.sort_values("weight_kg")
name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 18 2 2015-04-20
3 Cooper Schnauzer Gray 49 17 2011-12-11
0 Bella Labrador Brown 56 24 2013-07-01
1 Charlie Poodle Black 43 24 2016-09-16
2 Lucy Chow Chow Brown 46 24 2014-08-25
4 Max Labrador Black 59 29 2017-01-20
6 Bernie St. Bernard White 77 74 2018-02-27
Đặt tham số ascending là False sẽ sắp xếp dữ liệu theo chiều ngược lại, từ nặng nhất đến nhẹ nhất.
dogs.sort_values("weight_kg", ascending=False)
name breed color height_cm weight_kg date_of_birth
6 Bernie St. Bernard White 77 74 2018-02-27
4 Max Labrador Black 59 29 2017-01-20
0 Bella Labrador Brown 56 24 2013-07-01
1 Charlie Poodle Black 43 24 2016-09-16
2 Lucy Chow Chow Brown 46 24 2014-08-25
3 Cooper Schnauzer Gray 49 17 2011-12-11
5 Stella Chihuahua Tan 18 2 2015-04-20
Sắp xếp theo nhiều cột
Chúng ta có thể sắp xếp theo nhiều biến bằng cách truyền một danh sách tên cột vào sort_values. Ở đây, ta sắp xếp trước theo cân nặng, sau đó theo chiều cao. Lúc này, Charlie, Lucy và Bella được xếp từ thấp đến cao, dù chúng có cùng cân nặng.
dogs.sort_values(["weight_kg", "height_cm"])
name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 18 2 2015-04-20
3 Cooper Schnauzer Gray 49 17 2011-12-11
1 Charlie Poodle Black 43 24 2016-09-16
2 Lucy Chow Chow Brown 46 24 2014-08-25
0 Bella Labrador Brown 56 24 2013-07-01
4 Max Labrador Black 59 29 2017-01-20
6 Bernie St. Bernard White 77 74 2018-02-27
Để thay đổi chiều sắp xếp của các giá trị, hãy truyền một danh sách vào tham số ascending để chỉ định hướng sắp xếp cho từng biến. Bây giờ, Charlie, Lucy và Bella được xếp từ cao đến thấp.
dogs.sort_values(["weight_kg", "height_cm"], ascending=[True, False])
name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 18 2 2015-04-20
3 Cooper Schnauzer Gray 49 17 2011-12-11
0 Bella Labrador Brown 56 24 2013-07-01
2 Lucy Chow Chow Brown 46 24 2014-08-25
1 Charlie Poodle Black 43 24 2016-09-16
4 Max Labrador Black 59 29 2017-01-20
6 Bernie St. Bernard White 77 74 2018-02-27
Sắp xếp theo chỉ mục hàng với sort_index()
Đôi khi bạn có thể muốn sắp xếp lại các hàng dựa trên nhãn hàng của chúng (tức là chỉ mục của DataFrame) thay vì theo các cột cụ thể. Nếu vậy, bạn có thể dùng phương thức sort_index() thay cho sort_values(). Lưu ý rằng theo mặc định, sort_index() sẽ sắp xếp các hàng theo thứ tự tăng dần theo chỉ mục:
# Sort rows by their index (ascending)
dogs_sorted = dogs.sort_index()
print(dogs_sorted)
Nếu bạn cần sắp xếp các hàng theo thứ tự giảm dần, chỉ cần truyền ascending=False:
# Sort rows by their index (descending)
dogs_sorted_desc = dogs.sort_index(ascending=False)
print(dogs_sorted_desc)
Tương tự, nếu bạn có một chỉ mục nhiều cấp (phân cấp), sort_index() cũng có thể xử lý bằng cách sắp xếp ở nhiều cấp. Bạn chỉ cần truyền một danh sách vào tham số level hoặc ascending (giống như trước đó chúng ta phải truyền danh sách cho sort_values()):
# Sort rows by multiple levels of a multi-level index
dogs_sorted_multi = dogs.sort_index(level=[0, 1], ascending=[True, False])
print(dogs_sorted_multi)
Ví dụ tương tác về Pandas Sort Values
Trong ví dụ sau, bạn sẽ sắp xếp homelessness theo số lượng cá nhân vô gia cư, từ nhỏ đến lớn, và lưu lại dưới tên homelessness_ind. Cuối cùng, bạn sẽ in phần đầu của DataFrame đã sắp xếp.
# Sort homelessness by individuals
homelessness_ind = homelessness.sort_values("individuals")
# Print the top few rows
print(homelessness_ind.head())
Khi chạy đoạn mã trên, ta thu được kết quả sau:
region state individuals family_members state_pop
50 Mountain Wyoming 434.0 205.0 577601
34 West North Central North Dakota 467.0 75.0 758080
7 South Atlantic Delaware 708.0 374.0 965479
39 New England Rhode Island 747.0 354.0 1058287
45 New England Vermont 780.0 511.0 624358
Để tìm hiểu thêm về sắp xếp và chọn lọc dữ liệu, vui lòng xem video từ khóa học Data Manipulation with pandas của chúng tôi.
Nội dung này được trích từ khóa học Data Manipulation with pandas của DataCamp do Maggie Matsui và Richie Cotton biên soạn.
Tài liệu học thêm
Trong bài viết này, ngoài những nội dung khác, chúng ta đã học khi nào dùng sort_index() so với sort_values(): Dùng sort_values() khi bạn muốn sắp xếp lại các hàng dựa trên giá trị của các cột; dùng sort_index() khi bạn muốn sắp xếp lại các hàng dựa trên nhãn hàng (chỉ mục của DataFrame).
Chúng tôi có nhiều hướng dẫn pandas hữu ích khác để bạn tiếp tục học, bao gồm Hướng dẫn toàn diện về Pandas cho người mới bắt đầu để bạn có thể luyện tập thêm. Chúng tôi cũng có các bài how-to cụ thể cho những vấn đề thường gặp, bao gồm Cách nhập dữ liệu CSV vào Pandas và Cách nối DataFrame trong Pandas. Ngoài ra, hãy nhớ tham gia lộ trình kỹ năng Python Programming của chúng tôi để tiếp tục nâng cao kỹ năng.