Как реплицировать df.groupby('some_column').resample('Q').agg('total':'count') в полярах с помощью group_by_dynamicPython

Программы на Python
Ответить
Anonymous
 Как реплицировать df.groupby('some_column').resample('Q').agg('total':'count') в полярах с помощью group_by_dynamic

Сообщение Anonymous »

Учитывая, что я хочу группировать ежеквартально, я бы написал в pandas (учитывая, что индекс содержит столбец «дата»)

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

df = df.groupby('some_column').resample('Q').agg({"total": "count"})
Я пытался повторить это с помощью поляров:

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

df = df.group_by_dynamic('date', every='3mo', group_by='some_column', include_boundaries=True).agg(pl.len())
В пандах я возвращаю конец квартала. В полярах нижняя граница, поскольку для усечения по умолчанию установлено значение True. Как мне вернуть _upper_boundary в качестве даты моего столбца?
Очевидно, я мог бы просто запустить selecte после установки include_boundaries=True, но на самом деле я хочу установить для него значение false, потому что в документации говорится, что это повлияет на производительность, если установлено значение true.
Каждый ='3mo' равен pandas resample('Q')?
Примеры:

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

df = pd.DataFrame({'date': pd.date_range("2018-01-01", periods=365*24, freq='H')})
# Create second column 'pokemon_type':
df['pokemon_type'] = 'fire'
df.loc[400:, 'pokemon_type'] = 'water'

date pokemon_type
0    2018-01-01 00:00:00         fire
1    2018-01-01 01:00:00         fire
2    2018-01-01 02:00:00         fire
3    2018-01-01 03:00:00         fire
4    2018-01-01 04:00:00         fire
...          ...
8755 2018-12-31 19:00:00        water
8756 2018-12-31 20:00:00        water
8757 2018-12-31 21:00:00        water
8758 2018-12-31 22:00:00        water
8759 2018-12-31 23:00:00        water
[8760 rows x 2 columns]

Now groupby:
df['total'] = 0
df = df.set_index('date')
df = df.groupby('pokemon_type').resample('Q').agg({'total':'count'})

df
pokemon_type date
fire         2018-03-31    400
water        2018-03-31   1760
2018-06-30   2184
2018-09-30   2208
2018-12-31   2208
df.index
MultiIndex([( 'fire', '2018-03-31'),
('water', '2018-03-31'),
('water', '2018-06-30'),
('water', '2018-09-30'),
('water', '2018-12-31')],
names=['pokemon_type', 'date'])
Для Polars:
К сожалению, я не знаю, как разрезать столбец и присваивать подзначения. Пытался разобраться, но все еще над этим.
Полары df будут выглядеть так

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

┌──────────────┬─────────────────────┬─────────────────────┬────────────┬───────┐
│ pokemon_type ┆ _lower_boundary     ┆ _upper_boundary     ┆ date       ┆ count │
│ ---          ┆ ---                 ┆ ---                 ┆ ---        ┆ ---   │
│ str          ┆ datetime[μs]        ┆ datetime[μs]        ┆ date       ┆ i64   │
╞══════════════╪═════════════════════╪═════════════════════╪════════════╪═══════╡
│ fire         ┆ 1994-01-01 00:00:00 ┆ 1994-04-01 00:00:00 ┆ 1994-01-01 ┆ 58    │
│ water        ┆ 1994-01-01 00:00:00 ┆ 1994-04-01 00:00:00 ┆ 1994-01-01 ┆ 38    │
└──────────────┴─────────────────────┴─────────────────────┴────────────┴───────┘
Мне нужна _upper_boundary напрямую, без проблем с производительностью.

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

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

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

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

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

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