Правильно группируйте и фильтруйте с помощью Polars [дубликат]Python

Программы на Python
Ответить
Anonymous
 Правильно группируйте и фильтруйте с помощью Polars [дубликат]

Сообщение Anonymous »

У меня есть df для работы с 3 основными столбцами: cid1, cid2, cid3 и еще 7 столбцами cid4, cid5 и т. д.. и cid2 — это int, другие столбцы — с плавающей запятой.
Каждая комбинация cid1 и cid2 представляет собой рабочий набор с несколькими строками, в которых значения всех остальных столбцов различны. Я хочу отфильтровать df и получить df только с максимальными значениями в столбце cid3 для каждой комбинации cid1 и cid2. cid4 и следующие столбцы необходимо оставить без изменений.
Этот код помогает мне с одной частью моей задачи:

Код: Выделить всё

df = (df
.group_by("cid1", "cid2")
.agg(pl.max("cid3").alias("max_cid3"))
)
Он получает только 3 столбца: cid1, cid2, max_cid3 и фильтрует все строки, когда cid3 не является максимальным.
Но я не могу найти, как получить все остальные столбцы (

Код: Выделить всё

cid4, etc
) для этих строк без изменений.

Код: Выделить всё

df = (df
.group_by("cid1", "cid2")
.agg(pl.max("cid3").alias("max_cid3"), pl.col("cid4"))
)
Я пытался добавить pl.col("cid4") в список aggs, но в столбце я вижу в качестве значений разные списки некоторых значений cid4.
Как мне это сделать правильно? Может быть, у Polars есть другой способ сделать это, чем group_by?
В Pandas я могу это сделать:

Код: Выделить всё

import pandas as pd
import numpy as np

df["max_cid3"] = df.groupby(['cid1', 'cid2'])['cid3'].transform(np.max)
А затем отфильтровать df везде, где cid3==max_cid3
Но я не могу найти способ сделать это в Polars.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/748 ... ith-polars
Ответить

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

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

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

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

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