cara mengurutkan panda dataframe dari satu kolom

237

Saya memiliki bingkai data seperti ini:

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

Seperti yang Anda lihat, bulan tidak dalam urutan kalender. Jadi saya membuat kolom kedua untuk mendapatkan nomor bulan yang sesuai dengan setiap bulan (1-12). Dari sana, bagaimana saya bisa mengurutkan kerangka data ini berdasarkan pesanan bulan kalender?

Sachila Ranawaka
sumber

Jawaban:

326

Gunakan sort_valuesuntuk mengurutkan df berdasarkan nilai kolom tertentu:

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

Jika Anda ingin mengurutkan berdasarkan dua kolom, berikan daftar label kolom sort_valuesdengan urutan label kolom sesuai prioritas pengurutan. Jika Anda menggunakan df.sort_values(['2', '0']), hasilnya akan diurutkan berdasarkan kolom 2lalu kolom 0. Memang, ini tidak benar-benar masuk akal untuk contoh ini karena setiap nilai dalam df['2']unik.

EdChum
sumber
75

Saya mencoba solusi di atas dan saya tidak mencapai hasil, jadi saya menemukan solusi berbeda yang berfungsi untuk saya. The ascending = False adalah untuk memesan dataframe dalam turun pesanan, secara default adalah Benar . Saya menggunakan versi python 3.6.6 dan panda 0.23.4.

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

Anda dapat melihat lebih detail dalam dokumentasi panda di sini .

Joel Carneiro
sumber
9

Hanya menambahkan beberapa operasi lagi pada data. Misalkan kita memiliki kerangka data df, kita dapat melakukan beberapa operasi untuk mendapatkan hasil yang diinginkan

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)

akan memberikan sortedkeluaran label sebagai adataframe

    index   label
0   test        2
1   experiment  1
Harry_pb
sumber
7

Sama seperti solusi lain:

Anda dapat mengategorikan data string Anda (nama bulan) dan mengurutkannya seperti ini:

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)

Ini akan memberi Anda data yang diurutkan sesuai month namedengan yang Anda tentukan saat membuat Categoricalobjek.

alireza yazdandoost
sumber