Как сортировать строки по комбинациям столбцов - python - PullRequest
0 голосов
/ 18 марта 2020

Есть ли способ сортировки кадра данных по комбинации разных столбцов? Как в случае, если указанные c столбцы совпадают между строками, они будут сгруппированы вместе? Пример ниже: Любая помощь приветствуется!

Исходный фрейм данных

Преобразованный фрейм данных

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Один из способов сортировки pandas данных - использование .sort_values ​​().

Код ниже воспроизводит ваш примерный кадр данных:

df= pd.DataFrame({'v1': [1, 3, 2, 1, 4, 3],
                  'v2': [2, 2, 4, 2, 3, 2],
                  'v3': [3, 3, 2, 3, 2, 3],
                  'v4': [4, 5, 1, 4, 2, 5]})

Используя приведенный ниже код, можно отсортировать кадр данных по столбцам v1 и v2. В этом случае v2 используется только для разрыва связей.

df.sort_values(by=['v1', 'v2'], ascending=True) 

Параметр «by» здесь не ограничен каким-либо количеством переменных, поэтому можно расширить список, включив в него больше переменных в нужном порядке.

1 голос
/ 18 марта 2020

Это лучше всего подходит для вашего шаблона сортировки, показанного на изображении.

import pandas as pd

df = pd.DataFrame(dict(
    v1=[1,3,2,1,4,3],
    v2=[2,2,4,2,3,2],
    v3=[3,3,2,3,2,3],
    v4=[4,5,1,4,2,5],
))

# Make a temp column to sort the df by
df['sort'] = df.astype(str).values.sum(axis=1)
# Sort the df by that column, drop it and reset the index
df = df.sort_values(by='sort').drop(columns='sort').reset_index(drop=1)

print(df)

Ссылка, на которую вы можете сослаться - Код в python Репетитор

Редактировать : Рекомендация Золзой Лувсандоржа лучше:

import pandas as pd

df = pd.DataFrame(dict(
    v1=[1,3,2,1,4,3],
    v2=[2,2,4,2,3,2],
    v3=[3,3,2,3,2,3],
    v4=[4,5,1,4,2,5],
))

df = df.sort_values(by=list(df.columns)).reset_index(drop=1)

print(df)

Ссылка, на которую вы можете сослаться - Лучший код в python Репетитор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...