pandas.Grouper#

класс pandas.Grouper(*args, **kwargs)[источник]#

Grouper позволяет пользователю указать инструкцию группировки для объекта.

Эта спецификация выберет столбец через параметр key, или если заданы параметры level и/или axis, уровень индекса целевого объекта.

Если ось и/или уровень передаются как ключевые слова обоим Grouper и groupby, значения, переданные в Grouper имеют приоритет.

Параметры:
ключstr, по умолчанию None

Ключ группировки, который выбирает столбец группировки цели.

уровеньимя/номер, по умолчанию None

Уровень для целевого индекса.

freqstr / объект частоты, по умолчанию None

Это сгруппирует по указанной частоте, если целевой выбор (через ключ или уровень) является объектом типа datetime. Для полной спецификации доступных частот, пожалуйста, смотрите здесь.

осьstr, int, по умолчанию 0

Номер/имя оси.

sortbool, по умолчанию False

Сортировать ли полученные метки.

закрыт{'left' или 'right'}

Закрытый конец интервала. Только когда freq параметр передан.

метка{'left' или 'right'}

Граница интервала для использования при маркировке. Только когда freq параметр передан.

соглашение{‘start’, ‘end’, ‘e’, ‘s’}

Если группировщик — PeriodIndex и freq параметр передан.

originTimestamp или str, по умолчанию ‘start_day’

Метка времени, по которой производится корректировка группировки. Часовой пояс источника должен совпадать с часовым поясом индекса. Если строка, должна быть одной из следующих:

  • ‘эпоха’: origin равно 1970-01-01

  • 'start': origin является первым значением временного ряда

  • 'start_day': origin является первым днем в полночь временного ряда

  • ‘end’: origin является последним значением временного ряда

  • ‘end_day’: origin является потолочной полночью последнего дня

Добавлено в версии 1.3.0.

смещениеTimedelta или str, по умолчанию None

Смещение timedelta, добавленное к началу отсчета.

dropnabool, по умолчанию True

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

Возвращает:
Grouper или pandas.api.typing.TimeGrouper

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

Примеры

df.groupby(pd.Grouper(key="Animal")) эквивалентно df.groupby('Animal')

>>> 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

Укажите операцию ресемплинга для столбца 'Дата публикации'

>>> 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: 7min, 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: 17min, 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: 17min, 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: 17min, dtype: int64

Если вы хотите настроить начало бинов с помощью смещение 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: 17min, 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: 17min, dtype: int64

Для замены использования устаревшего основание аргумент, теперь можно использовать смещение, в этом примере это эквивалентно base=2:

>>> ts.groupby(pd.Grouper(freq='17min', offset='2min')).sum()
2000-10-01 23:16:00     0
2000-10-01 23:33:00     9
2000-10-01 23:50:00    36
2000-10-02 00:07:00    39
2000-10-02 00:24:00    24
Freq: 17min, dtype: int64