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