Сортировать столбец на основе определенного столбца | питон | панды

У меня есть такой фрейм данных:

c234  0.4255  0.2348  0.4255
c234  0.876   0.456   0.876
c561  0.9527  0.263   0.9527
c561  0.4111  0.1543  0.4111
c561  0.8231  0.975   0.975

Я хочу отсортировать 4th column внутри каждого 1st column, результат будет таким:

c234  0.876   0.456   0.876
c234  0.4255  0.2348  0.4255
c561  0.8231  0.975   0.975
c561  0.9527  0.263   0.9527
c561  0.4111  0.1543  0.4111

Любая помощь, пожалуйста?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Предполагая, что имена ваших столбцов были [0, 1, 2, 3]

df.sort_values([0, 3], ascending=[True, False])

      0       1       2       3
1  c234  0.8760  0.4560  0.8760
0  c234  0.4255  0.2348  0.4255
4  c561  0.8231  0.9750  0.9750
2  c561  0.9527  0.2630  0.9527
3  c561  0.4111  0.1543  0.4111

Сохранить размещение строки

Предположим, что первый столбец не отсортирован. и, вы не хотите его сортировать. Вам просто нужно отсортировать строки в каждой группе.

df.loc[
    df.groupby(0)[3].transform(
        lambda x: x.sort_values(ascending=False).index
    ).astype(df.index.dtype)
]

      0       1       2       3
1  c234  0.8760  0.4560  0.8760
0  c234  0.4255  0.2348  0.4255
4  c561  0.8231  0.9750  0.9750
2  c561  0.9527  0.2630  0.9527
3  c561  0.4111  0.1543  0.4111

Но это не интересно. Предположим, что фрейм данных был вместо этого

      0       1       2       3
0  c561  0.9527  0.2630  0.9527
1  c234  0.4255  0.2348  0.4255
2  c234  0.8760  0.4560  0.8760
3  c561  0.4111  0.1543  0.4111
4  c561  0.8231  0.9750  0.9750

Обратите внимание, что 'c561' находится вверху, а еще больше - внизу. Мы можем отсортировать их и сохранить те же позиции в строках. Давайте снова запустим последнее решение.

      0       1       2       3
4  c561  0.8231  0.9750  0.9750
2  c234  0.8760  0.4560  0.8760
1  c234  0.4255  0.2348  0.4255
0  c561  0.9527  0.2630  0.9527
3  c561  0.4111  0.1543  0.4111
Ответ принят как подходящий

Используйте sort_values с ascending в качестве логического списка для определения направления:

df.sort_values([0,3], ascending=[True, False])

Выход:

      0       1       2       3
1  c234  0.8760  0.4560  0.8760
0  c234  0.4255  0.2348  0.4255
4  c561  0.8231  0.9750  0.9750
2  c561  0.9527  0.2630  0.9527
3  c561  0.4111  0.1543  0.4111

Также добавьте следующую ссылку: pandas.pydata.org/pandas-docs/stable/generated/…

JR ibkr 22.08.2018 23:23

Повторяющийся вопрос stackoverflow.com/questions/37287938/…

JR ibkr 22.08.2018 23:28

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

Acccumulation 22.08.2018 23:34

Другие вопросы по теме