У меня есть фрейм данных Polars, и я хочу создать сводное представление, в котором агрегированные значения (например, уникальные идентификаторы, общее количество отправлений) отображаются в формате, который упрощает сравнение по месяцам. Вот пример моего набора данных:
Мой пример кадра данных:
В настоящее время я использую следующий подход group_by() для расчета количества уникальных идентификаторов и общего количества отправок для каждого месяца и канала:
Однако мой фактический набор данных намного больше и содержит больше agg_functions, поэтому мне нужен формат, который лучше выделяет сравнения по месяцам. В идеале я хочу, чтобы результат выглядел так:
| Channels | agg_func | months | months |
|----------|--------------|--------|--------|
| | | 1 | 2 |
| X | Uniques ID | 3 | 3 |
| X | Total sends | 4 | 4 |
| Y | Uniques ID | 4 | 3 |
| Y | Total sends | 4 | 4 |
Думаю, я мог бы использовать .pivot() и передавать функции агрегации как часть индекса. Но я не уверен, как реализовать это напрямую, не создавая вспомогательный DataFrame. Есть предложения?
У меня есть фрейм данных Polars, и я хочу создать сводное представление, в котором агрегированные значения (например, уникальные идентификаторы, общее количество отправлений) отображаются в формате, который упрощает сравнение по месяцам. Вот пример моего набора данных: Мой пример кадра данных: [code]import polars as pl df = pl.DataFrame({ "Channel": ["X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y"], "ID": ["a", "b", "b", "a", "e", "b", "g", "h", "a", "a", "k", "a", "b", "n", "o", "p"], "Month": ["1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2"] }) [/code] В настоящее время я использую следующий подход group_by() для расчета количества уникальных идентификаторов и общего количества отправок для каждого месяца и канала: [code]( df .group_by( pl.col("Month"), pl.col("Channel") ) .agg( pl.col("ID").n_unique().alias("Uniques ID"), pl.col("ID").len().alias("Total sends") ) ) shape: (4, 4) ┌───────┬─────────┬────────────┬─────────────┐ │ Month ┆ Channel ┆ Uniques ID ┆ Total sends │ │ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ str ┆ u32 ┆ u32 │ ╞═══════╪═════════╪════════════╪═════════════╡ │ 1 ┆ X ┆ 3 ┆ 4 │ │ 1 ┆ Y ┆ 4 ┆ 4 │ │ 2 ┆ X ┆ 3 ┆ 4 │ │ 2 ┆ Y ┆ 3 ┆ 4 │ └───────┴─────────┴────────────┴─────────────┘ [/code] Однако мой фактический набор данных намного больше и содержит больше agg_functions, поэтому мне нужен формат, который лучше выделяет сравнения по месяцам. В идеале я хочу, чтобы результат выглядел так: [code]| Channels | agg_func | months | months | |----------|--------------|--------|--------| | | | 1 | 2 | | X | Uniques ID | 3 | 3 | | X | Total sends | 4 | 4 | | Y | Uniques ID | 4 | 3 | | Y | Total sends | 4 | 4 | [/code] Думаю, я мог бы использовать .pivot() и передавать функции агрегации как часть индекса. Но я не уверен, как реализовать это напрямую, не создавая вспомогательный DataFrame. Есть предложения?