Groupby объединяет два столбца в словарь в PolarsPython

Программы на Python
Ответить
Anonymous
 Groupby объединяет два столбца в словарь в Polars

Сообщение Anonymous »

Учитывая следующие данные, я хочу сгруппировать и объединить два столбца в один, содержащий словарь. Один столбец предоставляет ключи, а значения берутся из другого столбца, который сначала объединяется в список.
import polars as pl

df = pl.DataFrame(
{
"names": ["foo", "ham", "spam", "cheese", "egg", "foo"],
"dates": ["1", "1", "2", "3", "3", "4"],
"groups": ["A", "A", "B", "B", "B", "C"],
}
)

Вот что я пытаюсь сделать:
groups combined
0 A {'1': ['foo', 'ham']}
1 B {'2': ['spam'], '3': ['cheese', 'egg']}
2 C {'4': ['foo']}

В pandas я могу сделать это с помощью двух операторов groupby, в pyspark — с помощью набора операций вокруг «map_from_entries», но, несмотря на различные попытки, я не нашел способа в полярах.
(
df.group_by("groups", "dates").all()
.to_pandas()
.groupby(["groups"])
.apply(lambda x: dict(zip(x["dates"], x["names"])))
.reset_index(name="combined")
)

Хотя это работает, это определенно неправильно.
В качестве альтернативы, вдохновленный этим постом, я попробовал ряд вариантов, подобных следующему, включая, среди прочего, преобразование dict в строки json.
df.group_by("groups").agg(
pl.map_groups(exprs=["dates", "names"], function=build_dict).alias("combined")
)


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

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

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

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

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

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