Ранжирование двух столбцов списка в полярах на основе элементов в первом списке, а затем во втором.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ранжирование двух столбцов списка в полярах на основе элементов в первом списке, а затем во втором.

Сообщение Anonymous »

Из-за определенных ограничений версия Polars – 0.18.4
С учетом кадра данных:
df = pl.DataFrame({
"column_id": [1,2,3],
"column1": [[1,2,1],[2,2,2],[0,0,1]],
"column2": [[0,0,0],[0,1,2],[0,2,1]]
})

Я хочу отсортировать столбцы 1 и 2 по убыванию по столбцу 1, а затем отсортировать по столбцу 2, если столбец 1 имеет связь.
Что мне удалось сделать, так это отсортировать столбец 1 и столбец 2 по убыванию столбца 1:
df_ranked = df.with_columns(
rank=pl.col('column1').list.eval( pl.element().rank(method="ordinal", descending=True) )
)

explode_col = ['column1','column2','rank']
rank = df_ranked['rank']

df_full_rank = (df_ranked.explode(explode_col)
.select( pl.all().sort_by('rank').over('column_id') )
.group_by('column_id', maintain_order=True).agg(pl.col(explode_col))
.with_columns(rank=rank)
)

Выход:
┌───────────┬───────────┬───────────┬───────────┐
│ column_id ┆ column1 ┆ column2 ┆ rank │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ list[i64] ┆ list[i64] ┆ list[u32] │
╞═══════════╪═══════════╪═══════════╪═══════════╡
│ 1 ┆ [2, 1, 1] ┆ [0, 0, 0] ┆ [2, 1, 3] │
│ 2 ┆ [2, 2, 2] ┆ [0, 1, 2] ┆ [1, 2, 3] │
│ 3 ┆ [1, 0, 0] ┆ [1, 0, 2] ┆ [2, 3, 1] │
└───────────┴───────────┴───────────┴───────────┘

Но этого недостаточно, поскольку не учитываются значения в столбце 2 при наличии связи.
В частности, во второй строке хотя в столбце1 все элементы связаны, но поскольку в столбце2 это [0,1,2], ранг должен быть [3,2,1], так как последний элемент имеет самый большой число. Аналогичная логика применима и к третьей строке.
Ожидаемый результат должен быть следующим:
┌───────────┬───────────┬───────────┬───────────┐
│ column_id ┆ column1 ┆ column2 ┆ rank │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ list[i64] ┆ list[i64] ┆ list[u32] │
╞═══════════╪═══════════╪═══════════╪═══════════╡
│ 1 ┆ [2, 1, 1] ┆ [0, 0, 0] ┆ [2, 1, 3] │
│ 2 ┆ [2, 2, 2] ┆ [2, 1, 0] ┆ [3, 2, 1] │
│ 3 ┆ [1, 0, 0] ┆ [1, 2, 0] ┆ [3, 2, 1] │
└───────────┴───────────┴───────────┴───────────┘


Подробнее здесь: https://stackoverflow.com/questions/788 ... t-then-the
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»