Сортировка данных в Pandas

Сортировка данных в Pandas: метод sort_values() и сортировка по нескольким столбцам

В анализе данных часто возникает необходимость упорядочивания информации. В Pandas для этой задачи предназначен метод sort_values(), позволяющий легко и быстро сортировать данные по одному или нескольким столбцам.

Базовая сортировка данных

Для начала создадим простой DataFrame:

import pandas as pd

data = {
    'Name': ['Anna', 'Mike', 'Lucy', 'John', 'Jack'],
    'Age': [25, 21, 23, 29, 20],
    'Salary': [50000, 55000, 52000, 60000, 49000]
}

df = pd.DataFrame(data)

Для сортировки по столбцу Age:

sorted_df = df.sort_values(by='Age')
print(sorted_df)

#    Name  Age  Salary
# 4  Jack   20   49000
# 1  Mike   21   55000
# 2  Lucy   23   52000
# 0  Anna   25   50000
# 3  John   29   60000

Сортировка в обратном порядке

С помощью аргумента ascending можно указать направление сортировки:

sorted_df = df.sort_values(by='Age', ascending=False)
print(sorted_df)

#    Name  Age  Salary
# 3  John   29   60000
# 0  Anna   25   50000
# 2  Lucy   23   52000
# 1  Mike   21   55000
# 4  Jack   20   49000

Сортировка по нескольким столбцам

Если необходимо упорядочить данные сначала по одному столбцу, а затем по другому:

sorted_df = df.sort_values(by=['Age', 'Salary'], ascending=[True, False])
print(sorted_df)

#    Name  Age  Salary
# 4  Jack   20   49000
# 1  Mike   21   55000
# 2  Lucy   23   52000
# 0  Anna   25   50000
# 3  John   29   60000

Здесь данные сначала сортируются по возрасту (Age), а затем по зарплате (Salary) в обратном порядке внутри каждой возрастной группы.

Сортировка по индексу

Если нужно упорядочить строки по их индексам:

sorted_df = df.sort_index(ascending=False)
print(sorted_df)

#    Name  Age  Salary
# 4  Jack   20   49000
# 3  John   29   60000
# 2  Lucy   23   52000
# 1  Mike   21   55000
# 0  Anna   25   50000

Сортировка с пропущенными значениями

Пропущенные значения NaN всегда считаются наибольшими, независимо от направления сортировки:

df['Salary'][2] = None
sorted_df = df.sort_values(by='Salary')

Тут NaN будет последним значением в отсортированной колонке Salary.

Постоянное изменение сортировки с inplace

Если вы хотите изменить исходный DataFrame, используйте параметр inplace:

df.sort_values(by='Age', inplace=True)

Сортировка с использованием пользовательской функции

Вы можете комбинировать sort_values() с key для сортировки с помощью пользовательской функции:

sorted_df = df.sort_values(by='Name', key=lambda x: x.str.len())

Сортировка с несколькими направлениями

Вы можете комбинировать столбцы и направления сортировки, чтобы получить более сложную сортировку. Например, сортируйте по возрасту в порядке возрастания, но по зарплате в порядке убывания:

sorted_df = df.sort_values(by=['Age', 'Salary'], ascending=[True, False])

Сортировка текстовых данных

При работе с текстовыми данными, важно учитывать регистр символов. По умолчанию, сортировка будет учитывать регистр:

data = {'Name': ['apple', 'Banana', 'cherry', 'Apple', 'banana']}
df = pd.DataFrame(data)
sorted_df = df.sort_values(by='Name')

В результате строки будут упорядочены с учетом регистра символов. Чтобы игнорировать регистр при сортировке, можно применить метод str.lower к столбцу перед сортировкой.

Сортировка дат

Pandas также позволяет корректно сортировать столбцы с датами:

data = {
    'Date': ['2023-01-01', '2021-03-05', '2022-05-10', '2021-11-11']
}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
sorted_df = df.sort_values(by='Date')

print(sorted_df)

#         Date
# 1 2021-03-05
# 3 2021-11-11
# 2 2022-05-10
# 0 2023-01-01

После преобразования столбца с датами с помощью pd.to_datetime, вы можете легко сортировать данные по датам.

Заключение

Метод sort_values() в Pandas – это интуитивно понятный и мощный инструмент, который позволяет сортировать данные различных типов. Важно знать его основные возможности и особенности применения для эффективного анализа данных.

Содержание: