У меня есть Pandas DataFrame с такими столбцами:
col1 col2 col3 col4 col5
a a1 foo1 foo2 foo3
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
a a2 foo10 foo11 foo12
a a3 foo13 foo14 foo15
b b2 foo16 foo17 foo18
Я хотел бы отсортировать строки (все строки) этого кадра данных на основе частоты убывания значений в col1
, а затем для других столбцов в строке получить одну из строк, которые имеют это значение в своем столбце ( аналогично группировке SQL). Как я могу сделать это в Пандах? Я считаю, что это некоторая комбинация groupby и sort_values, но я не совсем уверен, как это сделать.
Для приведенного выше примера a
является наиболее частым значением в col1
, за которым следуют b
и c
. Поэтому я хотел бы, чтобы первая строка результирующего кадра данных была одной из строк со значением col1
, равным a
. Следующая строка должна быть одной из двух строк со значением b
. И последний ряд - единственный ряд, имеющий значение c
.
Так что это один ответ:
col1 col2 col3 col4 col5
a a1 foo1 foo2 foo3
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
а вот так:
col1 col2 col3 col4 col5
a a3 foo13 foo14 foo15
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
А вот этот:
col1 col2 col3 col4 col5
a a2 foo10 foo11 foo12
b b2 foo16 foo17 foo18
c c1 foo7 foo8 foo9
В результате все это хорошо. Чтобы быть более понятным, смешивание значений из разных строк не допускается. Строка должна быть возвращена в точности как есть.