Сообщить об ошибке.

Класс Grouper() модуля pandas в Python

Группировка значений с повторной выборкой по дате/времени

Синтаксис:

import pandas

grouper = pandas.Grouper(*args, **kwargs)

Параметры:

  • key - ключ Groupby (строка), который выбирает столбец группировки целевого объекта.

  • level - строка или целое число определяющее уровень для целевого индекса.

  • freq - сгруппирует по указанному частоте интервала, если цель (key или level) является объектом, подобным дате/времени.

  • axis - номер/название оси.

  • sort - следует ли сортировать полученные метки.

  • closed - закрытый конец интервала. Только при передаче аргумента freq. Принимает строки 'left' или 'right'.

  • label - граница интервала, используемая для маркировки. Только при передаче аргумента freq. Принимает строки 'left' или 'right'.

  • convention - если grouper имеет значение pandas.PeriodIndex и передается аргумента freq. Принимает строки 'start', 'end', 'e', 's'.

  • origin='start_day' - временная метка, по которой нужно настроить группировку. Часовой пояс источника должен соответствовать часовому поясу индекса. Принимает pandas.Timestamp или строку. Если строка, то должна быть одной из следующих:

  • epoch: это дата 1970-01-01;

  • start: первое значение временного ряда;

  • start_day: первый день в полночь временного ряда;

  • end: последнее значение временного ряда;

  • end_day: полночь последнего дня временного ряда.

  • offset=None - смещение timedelta, добавленное к исходной точке. Принимает pandas.Timedelta или str.

  • dropna - если True и если ключи группы содержат значения NA, то NA вместе со строкой/столбцом будут удалены. Если False, то значения NA будут обрабатываться также, как ключ в группах.

Возвращаемое значение:

  • возвращает объект TimeGrouper, если аргумент freq не имеет значения None. В противном случае возвращается объект Grouper.

Описание:

Класс группировщика Grouper() модуля pandas позволяет пользователю указывать инструкцию для метода .groupby() объектов Series/DataFrame. В спецификации столбец выбирается с помощью ключевого аргумента, или, если заданы аргументы level и/или asix, уровня индекса целевого объекта.

Если axis и/или level передаются в качестве ключевых аргументов как в pandas.Grouper, так и в groupby, то значения, переданные в pandas.Grouper, имеют приоритет.

# вызов
DataFrame.groupby(pd.Grouper(key="Animal")) 

# Эквивалентен вызову 
DataFrame.groupby('Animal')

Примеры использования класса pandas.Grouper():

>>> import pandas as pd

df = pd.DataFrame(
    {
        "Animal": ["Falcon", "Parrot", "Falcon", "Falcon", "Parrot"],
        "Speed": [100, 5, 200, 300, 15],
    }
)

>>> df
#    Animal  Speed
# 0  Falcon    100
# 1  Parrot      5
# 2  Falcon    200
# 3  Falcon    300
# 4  Parrot     15

>>> df.groupby(pd.Grouper(key="Animal")).mean()
#         Speed
# Animal
# Falcon  200.0
# Parrot   10.0

Группировка значений с повторной выборкой в столбце "Publish date":

df = pd.DataFrame(
   {
       "Publish date": [
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-01-16")
        ],
        "ID": [0, 1, 2, 3],
        "Price": [10, 20, 30, 40]
    }
)

>>> df
#   Publish date  ID  Price
# 0   2000-01-02   0     10
# 1   2000-01-02   1     20
# 2   2000-01-09   2     30
# 3   2000-01-16   3     40

>>> df.groupby(pd.Grouper(key="Publish date", freq="1W")).mean()
#                ID  Price
# Publish date
# 2000-01-02    0.5   15.0
# 2000-01-09    2.0   30.0
# 2000-01-16    3.0   40.0

Если необходимо настроить начало интервалов на основе фиксированной отметки времени:

>>> start, end = '2000-10-01 23:30:00', '2000-10-02 00:30:00'
>>> rng = pd.date_range(start, end, freq='7min')
>>> ts = pd.Series(np.arange(len(rng)) * 3, index=rng)
>>> ts
# 2000-10-01 23:30:00     0
# 2000-10-01 23:37:00     3
# 2000-10-01 23:44:00     6
# 2000-10-01 23:51:00     9
# 2000-10-01 23:58:00    12
# 2000-10-02 00:05:00    15
# 2000-10-02 00:12:00    18
# 2000-10-02 00:19:00    21
# 2000-10-02 00:26:00    24
# Freq: 7T, dtype: int64
>>> ts.groupby(pd.Grouper(freq='17min')).sum()
# 2000-10-01 23:14:00     0
# 2000-10-01 23:31:00     9
# 2000-10-01 23:48:00    21
# 2000-10-02 00:05:00    54
# 2000-10-02 00:22:00    24
# Freq: 17T, dtype: int64
>>> ts.groupby(pd.Grouper(freq='17min', origin='epoch')).sum()
# 2000-10-01 23:18:00     0
# 2000-10-01 23:35:00    18
# 2000-10-01 23:52:00    27
# 2000-10-02 00:09:00    39
# 2000-10-02 00:26:00    24
# Freq: 17T, dtype: int64
>>> ts.groupby(pd.Grouper(freq='17min', origin='2000-01-01')).sum()
# 2000-10-01 23:24:00     3
# 2000-10-01 23:41:00    15
# 2000-10-01 23:58:00    45
# 2000-10-02 00:15:00    45
# Freq: 17T, dtype: int64

Если необходимо настроить начало интервалов со смещением pandas.Timedelta, два следующих примера эквивалентны:

>>> ts.groupby(pd.Grouper(freq='17min', origin='start')).sum()
# 2000-10-01 23:30:00     9
# 2000-10-01 23:47:00    21
# 2000-10-02 00:04:00    54
# 2000-10-02 00:21:00    24
# Freq: 17T, dtype: int64
>>> ts.groupby(pd.Grouper(freq='17min', offset='23h30min')).sum()
# 2000-10-01 23:30:00     9
# 2000-10-01 23:47:00    21
# 2000-10-02 00:04:00    54
# 2000-10-02 00:21:00    24
# Freq: 17T, dtype: int64