Làm thế nào để sắp xếp khung dữ liệu gấu trúc từ một cột


236

Tôi có một khung dữ liệu như thế này:

print(df)

        0          1     2
0   354.7      April   4.0
1    55.4     August   8.0
2   176.5   December  12.0
3    95.5   February   2.0
4    85.6    January   1.0
5     152       July   7.0
6   238.7       June   6.0
7   104.8      March   3.0
8   283.5        May   5.0
9   278.8   November  11.0
10  249.6    October  10.0
11  212.7  September   9.0

Như bạn có thể thấy, tháng không theo thứ tự lịch. Vì vậy, tôi đã tạo một cột thứ hai để lấy số tháng tương ứng với mỗi tháng (1-12). Từ đó, làm cách nào tôi có thể sắp xếp khung dữ liệu này theo thứ tự tháng theo lịch?

Câu trả lời:


323

Sử dụng sort_valuesđể sắp xếp df theo các giá trị của một cột cụ thể:

In [18]:
df.sort_values('2')

Out[18]:
        0          1     2
4    85.6    January   1.0
3    95.5   February   2.0
7   104.8      March   3.0
0   354.7      April   4.0
8   283.5        May   5.0
6   238.7       June   6.0
5   152.0       July   7.0
1    55.4     August   8.0
11  212.7  September   9.0
10  249.6    October  10.0
9   278.8   November  11.0
2   176.5   December  12.0

Nếu bạn muốn sắp xếp theo hai cột, hãy chuyển danh sách nhãn cột sang sort_valuesvới nhãn cột được sắp xếp theo mức độ ưu tiên sắp xếp. Nếu bạn sử dụng df.sort_values(['2', '0']), kết quả sẽ được sắp xếp theo cột 2rồi cột 0. Cấp, điều này không thực sự có ý nghĩa cho ví dụ này bởi vì mỗi giá trị trong df['2']là duy nhất.


75

Tôi đã thử các giải pháp trên và tôi không đạt được kết quả, vì vậy tôi đã tìm thấy một giải pháp khác phù hợp với mình. Các tăng dần = False là ra lệnh dataframe trong tự giảm dần theo thứ tự, theo mặc định nó là True . Tôi đang sử dụng phiên bản python 3.6.6 và pandas 0.23.4.

final_df = df.sort_values(by=['2'], ascending=False)

Bạn có thể xem thêm chi tiết trong tài liệu về gấu trúc ở đây .


8

Chỉ cần thêm một số hoạt động trên dữ liệu. Giả sử chúng ta có một khung dữ liệu df, chúng ta có thể thực hiện một số thao tác để có đầu ra mong muốn

ID         cost      tax    label
1       216590      1600    test      
2       523213      1800    test 
3          250      1500    experiment

(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)

sẽ cho sortedđầu ra của nhãn là mộtdataframe

    index   label
0   test        2
1   experiment  1

7

Cũng như một giải pháp khác:

bạn có thể phân loại dữ liệu chuỗi của mình (tên tháng) và sắp xếp theo thứ tự như thế này:

df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)

Nó sẽ cung cấp cho bạn dữ liệu theo thứ tự month namenhư bạn đã chỉ định trong khi tạo Categoricalđối tượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.