У меня есть такой фрейм данных:
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
Любая помощь, пожалуйста?






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
Повторяющийся вопрос stackoverflow.com/questions/37287938/…
Обратите внимание, что это будет отсортировано по первому столбцу, а затем по четвертому. Если вы хотите отсортировать по четвертому столбцу, но сохранить исходный порядок для первого столбца, все будет сложнее.
Также добавьте следующую ссылку: pandas.pydata.org/pandas-docs/stable/generated/…