Pandas: як сортувати dataframe на основі рядкового стовпця


Ви можете використовувати наступні методи для сортування рядків pandas DataFrame на основі значень певного рядкового стовпця:

Спосіб 1: сортування за стовпцем рядка (якщо стовпець містить лише символи)

 df = df. sort_values (' my_string_column ')

Спосіб 2: сортування за стовпцем рядка (якщо стовпець містить символи та числа)

 #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 ')

Наступні приклади показують, як використовувати кожен метод на практиці.

Приклад 1: Сортування за стовпцем рядка (якщо стовпець містить лише символи)

Припустімо, що у нас є такий фрейм даних pandas, який містить інформацію про продажі різних продуктів у продуктовому магазині:

 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

Ми можемо використовувати такий синтаксис, щоб сортувати рядки DataFrame на основі рядків у стовпці продукту :

 #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

Зауважте, що рядки тепер відсортовано від A до Z на основі рядків у стовпці Product .

Якщо замість цього ви хочете відсортувати від Я до А, просто додайте аргумент ascending=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

Зауважте, що рядки тепер відсортовано від Z до A на основі рядків у стовпці Product .

Приклад 2: сортування за стовпцем рядка (якщо стовпець містить символи та числа)

Припустімо, що у нас є такий фрейм даних pandas, який містить інформацію про продажі різних продуктів у продуктовому магазині:

 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

Зауважте, що рядки в стовпці продукту містять як символи, так і числа.

Якщо ми спробуємо відсортувати рядки DataFrame, використовуючи значення в стовпці продукту , рядки не будуть відсортовані в правильному порядку на основі чисел:

 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

Замість цього нам потрібно створити новий тимчасовий стовпець під назвою sort , який містить лише числа зі стовпця продукту, потім відсортувати за значеннями в стовпці сортування , а потім повністю видалити стовпець:

 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

Зверніть увагу, що рядки тепер відсортовано за рядками в стовпці продукту , а числа відсортовано в правильному порядку.

Примітка . Повну документацію щодо функції sort_values() pandas можна знайти тут .

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в pandas:

Панди: як сортувати за датою
Pandas: як сортувати стовпці за назвою
Pandas: як сортувати як за індексом, так і за стовпцем

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *