Pandy: jak sortować dataframe na podstawie kolumny ciągów


Możesz użyć następujących metod, aby posortować wiersze ramki DataFrame pandy na podstawie wartości określonej kolumny ciągu:

Metoda 1: Sortuj według kolumny ciągu (gdy kolumna zawiera tylko znaki)

 df = df. sort_values (' my_string_column ')

Metoda 2: Sortuj według kolumny ciągu (jeśli kolumna zawiera znaki i cyfry)

 #create 'sort' column that contains digits from 'my_string_column'
df[' sort '] = df[' my_string_column ']. str . extract (' (\d+) ', expand= False ). astype (int)

#sort rows based on digits in 'sort' column
df = df. sort_values (' sort ')

Poniższe przykłady pokazują, jak zastosować każdą metodę w praktyce.

Przykład 1: Sortowanie według kolumny ciągu (gdy kolumna zawiera tylko znaki)

Załóżmy, że mamy następującą pandę DataFrame zawierającą informacje o sprzedaży różnych produktów w sklepie spożywczym:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' product ': ['Apples', 'Oranges', 'Bananas', 'Lettuce', 'Beans'],
                   ' sales ': [18, 22, 19, 14, 29]})

#view DataFrame
print (df)

   product sales
0 Apples 18
1 Oranges 22
2 Bananas 19
3 Lettuce 14
4 Beans 29

Możemy użyć następującej składni, aby posortować wiersze ramki DataFrame na podstawie ciągów znaków w kolumnie produktu :

 #sort rows from A to Z based on string in 'product' column
df = df. sort_values (' product ')

#view updated DataFrame
print (df)

   product sales
0 Apples 18
2 Bananas 19
4 Beans 29
3 Lettuce 14
1 Oranges 22

Należy zauważyć, że wiersze są teraz posortowane od A do Z na podstawie ciągów w kolumnie Produkt .

Jeśli zamiast tego chcesz sortować od Z do A, po prostu dodaj argument rosnąco=False :

 #sort rows from Z to A based on string in 'product' column
df = df. sort_values (' product ', ascending= False )

#view updated DataFrame
print (df)

   product sales
1 Oranges 22
3 Lettuce 14
4 Beans 29
2 Bananas 19
0 Apples 18

Należy zauważyć, że wiersze są teraz sortowane od Z do A na podstawie ciągów w kolumnie Produkt .

Przykład 2: Sortowanie według kolumny ciągu (gdy kolumna zawiera znaki i cyfry)

Załóżmy, że mamy następującą pandę DataFrame zawierającą informacje o sprzedaży różnych produktów w sklepie spożywczym:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' product ': ['A3', 'A5', 'A22', 'A50', 'A2', 'A7', 'A9', 'A13'],
                   ' sales ': [18, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  product sales
0 A3 18
1 A5 22
2 A22 19
3 A50 14
4 A2 14
5 A7 11
6 A9 20
7 A13 28

Należy pamiętać, że ciągi w kolumnie produktu zawierają zarówno znaki, jak i cyfry.

Jeśli spróbujemy posortować wiersze DataFrame za pomocą wartości w kolumnie produktu , ciągi znaków nie zostaną posortowane we właściwej kolejności na podstawie liczb:

 import pandas as pd

#sort rows based on strings in 'product' column
df = df. sort_values (' product ')

#view updated DataFrame
print (df)

  product sales
7 A13 28
4 A2 14
2 A22 19
0 A3 18
1 A5 22
3 A50 14
5 A7 11
6 A9 20

Zamiast tego musimy utworzyć nową tymczasową kolumnę o nazwie sort , która będzie zawierała tylko liczby z kolumny produktu, następnie posortować według wartości w kolumnie sortowania , a następnie całkowicie usunąć kolumnę:

 import pandas as pd

#create new 'sort' column that contains digits from 'product' column
df[' sort '] = df[' product ']. str . extract (' (\d+) ', expand= False ). astype (int)

#sort rows based on digits in 'sort' column
df = df. sort_values (' sort ')

#drop 'sort' column
df = df. drop (' sort ', axis= 1 )

#view updated DataFrame
print (df)

  product sales
4 A2 14
0 A3 18
1 A5 22
5 A7 11
6 A9 20
7 A13 28
2 A22 19
3 A50 14

Zauważ, że wiersze w kolumnie produktu są teraz posortowane według ciągów, a liczby są posortowane we właściwej kolejności.

Uwaga : pełną dokumentację funkcji sort_values() pandy można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w pandach:

Pandy: jak sortować według daty
Pandy: jak sortować kolumny według nazwy
Pandy: jak sortować według indeksu i kolumny

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *