Panda's: hoe dataframe te sorteren op basis van een stringkolom
U kunt de volgende methoden gebruiken om de rijen van een Panda DataFrame te sorteren op basis van de waarden van een bepaalde tekenreekskolom:
Methode 1: Sorteren op tekenreekskolom (wanneer de kolom alleen tekens bevat)
df = df. sort_values (' my_string_column ')
Methode 2: Sorteren op tekenreekskolom (wanneer de kolom tekens en cijfers bevat)
#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 ')
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken.
Voorbeeld 1: Sorteren op tekenreekskolom (wanneer de kolom alleen tekens bevat)
Stel dat we het volgende panda’s DataFrame hebben dat informatie bevat over de verkoop van verschillende producten in een supermarkt:
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
We kunnen de volgende syntaxis gebruiken om de rijen van het DataFrame te sorteren op basis van de tekenreeksen in de productkolom :
#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
Houd er rekening mee dat de rijen nu van A tot Z zijn gesorteerd op basis van de tekenreeksen in de kolom Product .
Als u in plaats daarvan van Z naar A wilt sorteren, voegt u eenvoudigweg het argument oplopend=False toe:
#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
Houd er rekening mee dat de rijen nu zijn gesorteerd van Z tot A op basis van de tekenreeksen in de kolom Product .
Voorbeeld 2: Sorteren op tekenreekskolom (wanneer de kolom tekens en cijfers bevat)
Stel dat we het volgende panda’s DataFrame hebben dat informatie bevat over de verkoop van verschillende producten in een supermarkt:
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
Houd er rekening mee dat de tekenreeksen in de productkolom zowel tekens als cijfers bevatten.
Als we proberen de rijen van het DataFrame te sorteren met behulp van de waarden in de productkolom , worden de strings niet in de juiste volgorde gesorteerd op basis van de cijfers:
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
In plaats daarvan moeten we een nieuwe tijdelijke kolom maken met de naam sort die alleen de getallen uit de productkolom bevat, vervolgens sorteren op de waarden in de sorteerkolom en vervolgens de kolom volledig verwijderen:
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
Merk op dat de rijen nu worden gesorteerd op tekenreeksen in de productkolom en dat de getallen in de juiste volgorde worden gesorteerd.
Opmerking : u kunt hier de volledige documentatie van de functie pandas sort_values() vinden.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in panda’s kunt uitvoeren:
Panda’s: sorteren op datum
Panda’s: kolommen op naam sorteren
Panda’s: sorteren op zowel index als kolom