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