Полярные группы group_by + value_countsPython

Программы на Python
Anonymous
 Полярные группы group_by + value_counts

Сообщение Anonymous »

У меня есть фрейм данных Polars со столбцом категориальных значений

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

import polars as pl

df = pl.from_repr("""
┌───────────────────┬──────────────┬────────┐
│ session_id        ┆ elapsed_time ┆ fqid   │
│ ---               ┆ ---          ┆ ---    │
│ i64               ┆ i32          ┆ cat    │
╞═══════════════════╪══════════════╪════════╡
│ 20090312431273200 ┆ 0            ┆ intro  │
│ 20090312431273200 ┆ 1323         ┆ gramps │
│ 20090312431273200 ┆ 831          ┆ gramps │
│ 20090312431273200 ┆ 1147         ┆ gramps │
│ 20090312431273200 ┆ 5197         ┆ teddy  │
│ 20090312431273200 ┆ 6180         ┆ teddy  │
│ 20090312431273200 ┆ 7014         ┆ teddy  │
│ 20090312431273200 ┆ 7946         ┆ teddy  │
└───────────────────┴──────────────┴────────┘
""")
И я хочу преобразовать столбец fqid так:

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

┌───────────────────┬─────────────┬────────────┬────────────┐
│ session_id        ┆ fqid_gramps ┆ fqid_intro ┆ fqid_teddy │
│ ---               ┆ ---         ┆ ---        ┆ ---        │
│ i64               ┆ i32         ┆ i32        ┆ i32        │
╞═══════════════════╪═════════════╪════════════╪════════════╡
│ 20090312431273200 ┆ 1           ┆ 1          ┆ 4          │
└───────────────────┴─────────────┴────────────┴────────────┘
То есть, я хотел бы:
  • Group_by по session_id,
  • Создать value_counts() по fqid,
  • Переименовать столбцы так, чтобы это было «fqid_» + категория,
  • Превратить их в столбцы (транспонировать),
  • Добавьте их к результату.
Технически я мог бы добиться этого без группировки, используя что-то вроде

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

column_values = train['fqid'].value_counts().with_columns(pl.concat_str(pl.lit('fqid' + '_').alias('fqid'), pl.col('fqid').cast(pl.String))).transpose()
column_values = column_values.rename(column_values.head(1).to_dicts().pop()).slice(1)
Но когда я пытаюсь создать агрегирующую функцию из этой замены train['fqid'] на pl.col('fqid') и создания group_by('session_id').aggregate(func('fqid')), это не дает мне ничего, кроме ошибок, таких как AttributeError: объект 'Expr' не имеет атрибута 'with_columns'.
Не могли бы вы подсказать, как правильно выполнить эту операцию?

Подробнее здесь: https://stackoverflow.com/questions/763 ... lue-counts

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