我有一个 Polars DataFrame,我想创建一个汇总视图,其中聚合值(例如唯一 ID、总发送量)以一种便于跨月比较的格式显示。以下是我的数据集示例:
我的示例数据框:
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"]
})
目前,我使用以下group_by()
方法来计算每个月和每个渠道的唯一 ID 数量和总发送次数:
(
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 │
└───────┴─────────┴────────────┴─────────────┘
但是,我的实际数据集要大得多,并且具有更多 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 的情况下直接实现这一点。有什么建议吗?