panda veri çerçevesini bir sütundan sıralama


237

Ben böyle bir veri çerçevesi var:

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

Gördüğünüz gibi, aylar takvim düzeninde değil. Bu yüzden her aya karşılık gelen ay numarasını almak için ikinci bir sütun oluşturdum (1-12). Oradan, bu veri çerçevesini takvim aylarının sırasına göre nasıl sıralayabilirim?

Yanıtlar:


326

sort_valuesDf'yi belirli bir sütunun değerlerine göre sıralamak için kullanın :

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

İki sütuna göre sıralamak istiyorsanız, sütun etiketlerinin listesini sort_valuessıralama önceliğine göre sıralanmış olarak bir sütun etiketi geçirin. Kullanırsanız df.sort_values(['2', '0']), sonuç önce sütuna, 2sonra sütuna göre sıralanır 0. Bu örnek için gerçekten bir anlam ifade etmiyor çünkü içindeki her değer df['2']benzersiz.


75

Yukarıdaki çözümleri denedim ve sonuç elde edemiyorum, bu yüzden benim için çalışan farklı bir çözüm buldum. Artan = False içinde dataframe sipariş etmektir azalan düzeni varsayılan olarak True . Python 3.6.6 ve pandalar 0.23.4 sürümlerini kullanıyorum.

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

Panda belgelerinde daha fazla ayrıntıyı burada bulabilirsiniz .


9

Verilere biraz daha işlem eklemek yeterli. Bir veri çerçevemiz olduğunu varsayalım df, istenen çıktıları almak için birkaç işlem yapabiliriz

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)

verecek sorteda kadar etiket çıkışıdataframe

    index   label
0   test        2
1   experiment  1

7

Tıpkı başka bir çözüm gibi:

dize verilerinizi (ay adı) kategorilere ayırabilir ve şu şekilde sıralayabilirsiniz:

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)

Nesneyi month nameoluştururken belirttiğiniz şekilde sipariş edilen verileri verecektir Categorical.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.