Существует кадр данных Polars, состоящий из трех полей, перечисленных ниже.
df = pl.from_repr("""
┌─────────┬─────────────────────┬─────────────┐
│ user_id ┆ date ┆ part_of_day │
│ --- ┆ --- ┆ --- │
│ i64 ┆ datetime[ns] ┆ cat │
╞═════════╪═════════════════════╪═════════════╡
│ 173367 ┆ 2021-08-03 00:00:00 ┆ day │
│ 132702 ┆ 2021-10-28 00:00:00 ┆ evening │
│ 100853 ┆ 2021-07-29 00:00:00 ┆ night │
│ 305810 ┆ 2021-08-24 00:00:00 ┆ day │
│ 305239 ┆ 2021-08-13 00:00:00 ┆ day │
└─────────┴─────────────────────┴─────────────┘
""")
Моя задача — посчитать количество уникальных пользователей за каждую неделю и время суток. Polars предоставляет три различных типа параметров группировки:
[*]group_by: этот параметр позволяет выполнять простую группировку по столбцам или выражениям.
< li>group_by_dynamic: этот параметр принимает в качестве группирующего элемента только столбец даты и времени.
[*]прокрутка: этот параметр также принимает только столбец даты и времени в качестве группирующего элемента.
Похоже, что group_by_dynamic лучше всего подойдет для этой конкретной задачи. Однако он не позволяет использовать другие столбцы в качестве группировщика. Поэтому мой вопрос: как я могу выполнить эту задачу с помощью Polars?
Кроме того, я включил некоторый код, который я бы использовал для решения этой проблемы с помощью Pandas.
(
df
.cast({"part_of_day": pl.String})
.to_pandas()
.groupby([pd.Grouper(key="date", freq="1W"), "part_of_day"])
.user_id
.nunique()
)
Желаемый результат:
date part_of_day
2021-08-01 night 1
2021-08-08 day 1
2021-08-15 day 1
2021-08-29 day 1
2021-10-31 evening 1
Name: user_id, dtype: int64
Подробнее здесь: https://stackoverflow.com/questions/756 ... cal-values