Pandas: como classificar o dataframe com base na coluna de string
Você pode usar os seguintes métodos para classificar as linhas de um DataFrame do pandas com base nos valores de uma coluna de string específica:
Método 1: classificar por coluna de string (quando a coluna contém apenas caracteres)
df = df. sort_values (' my_string_column ')
Método 2: classificar por coluna de string (quando a coluna contém caracteres e números)
#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 ')
Os exemplos a seguir mostram como usar cada método na prática.
Exemplo 1: Classificar por coluna de string (quando a coluna contém apenas caracteres)
Suponha que temos o seguinte DataFrame do pandas que contém informações sobre vendas de vários produtos em um supermercado:
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
Podemos usar a seguinte sintaxe para classificar as linhas do DataFrame com base nas strings da coluna do produto :
#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
Observe que as linhas agora são classificadas de A a Z com base nas strings da coluna Produto .
Se você quiser classificar de Z para A, basta adicionar o argumento ascendente=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
Observe que as linhas agora são classificadas de Z a A com base nas strings da coluna Produto .
Exemplo 2: Classificar por coluna de string (quando a coluna contém caracteres e números)
Suponha que temos o seguinte DataFrame do pandas que contém informações sobre vendas de vários produtos em um supermercado:
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
Observe que as strings na coluna do produto contêm caracteres e números.
Se tentarmos classificar as linhas do DataFrame usando os valores da coluna do produto , as strings não serão classificadas na ordem correta com base nos números:
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
Em vez disso, precisamos criar uma nova coluna temporária chamada classificação , que contém apenas os números da coluna do produto, depois classificar pelos valores na coluna de classificação e, em seguida, excluir a coluna completamente:
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
Observe que as linhas agora são classificadas por strings na coluna do produto e os números são classificados na ordem correta.
Nota : Você pode encontrar a documentação completa da função sort_values() do pandas aqui .
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:
Pandas: como classificar por data
Pandas: como classificar colunas por nome
Pandas: como classificar por índice e coluna