Как использовать функции агрегации в качестве индекса в кадре данных Polars?Python

Программы на Python
Ответить
Anonymous
 Как использовать функции агрегации в качестве индекса в кадре данных Polars?

Сообщение Anonymous »

У меня есть фрейм данных Polars, и я хочу создать сводное представление, в котором агрегированные значения (например, уникальные идентификаторы, общее количество отправлений) отображаются в формате, который упрощает сравнение по месяцам. Вот пример моего набора данных:
Мой пример кадра данных:

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

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() для расчета количества уникальных идентификаторов и общего количества отправок для каждого месяца и канала:

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

(
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. Есть предложения?

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

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

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

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

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

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