Spec-Zone.ru › pandas 0.23

pandas.Series.resample

Series.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None) [source]

Удобный метод для преобразования частоты и ресемплирования временных рядов. Объект должен иметь индекс типа datetime (DatetimeIndex, PeriodIndex или TimedeltaIndex), или передать значения типа datetime в параметр on или level.

Параметры:

rule : строка

строка или объект смещения, представляющий целевое преобразование

axis : int, optional, default 0

closed : {‘right’, ‘left’}

Какая сторона интервала бина закрыта. По умолчанию ‘left’ для всех частот смещений, кроме ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’ и ‘W’, для которых значение по умолчанию равно ‘right’.

label : {‘right’, ‘left’}

Какой край бина использовать для метки ведра. По умолчанию ‘left’ для всех частот смещений, кроме ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’ и ‘W’, для которых значение по умолчанию равно ‘right’.

convention : {‘start’, ‘end’, ‘s’, ‘e’}

Только для PeriodIndex, управляет тем, использовать ли начало или конец rule

kind: {‘timestamp’, ‘period’}, необязательно

Передайте ‘timestamp’, чтобы преобразовать результирующий индекс в DateTimeIndex, или ‘period’, чтобы преобразовать его в PeriodIndex. По умолчанию сохраняется исходное представление.

loffset : timedelta

Корректирует метки ресемплированных временных меток

base : целое число, по умолчанию 0

Для частот, которые равномерно делят 1 день, «начало» агрегированных интервалов. Например, для частоты ‘5min’ значение base может варьироваться от 0 до 4. По умолчанию 0

on : строка, необязательно

Для DataFrame, столбец для использования вместо индекса для ресемплирования. Столбец должен быть типа datetime.

Введено в версии 0.19.0.

level : строка или целое число, необязательно

Для MultiIndex, уровень (имя или номер) для использования при ресемплировании. Уровень должен быть типа datetime.

Введено в версии 0.19.0.

Возвращает:
Объект ресемплера

См. также

groupby
Группировка по отображению, функции, метке или списку меток.

Примечания

См. руководство пользователя для получения дополнительной информации.

Дополнительную информацию об обозначениях смещений см. на этой странице.

Примеры

Начните с создания ряда с 9 отметками времени с интервалом в одну минуту.

>>> index = pd.date_range('1/1/2000', periods=9, freq='T')
>>> series = pd.Series(range(9), index=index)
>>> series
2000-01-01 00:00:00    0
2000-01-01 00:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4
2000-01-01 00:05:00    5
2000-01-01 00:06:00    6
2000-01-01 00:07:00    7
2000-01-01 00:08:00    8
Freq: T, dtype: int64

Ресемплируйте ряд в бины по 3 минуты и суммируйте значения отметки времени, попадающие в каждый бину.

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64

Ресемплируйте ряд в бины по 3 минуты как выше, но используйте правый край каждого бина для метки вместо левого. Обратите внимание, что значение в ведре, используемое в качестве метки, не включается в само ведро. Например, в исходном ряду ведро 2000-01-01 00:03:00 содержит значение 3, но суммарное значение в ресемплированном ведре с меткой 2000-01-01 00:03:00 не включает 3 (если бы включало, суммарное значение было бы 6, а не 3). Чтобы включить это значение, закройте правый край интервала бина, как показано в следующем примере.

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64

Ресемплируйте ряд в бины по 3 минуты как выше, но закройте правый край интервала бина.

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64

Ресемплируйте ряд в бины по 30 секунд.

>>> series.resample('30S').asfreq()[0:5] #select first 5 rows
2000-01-01 00:00:00   0.0
2000-01-01 00:00:30   NaN
2000-01-01 00:01:00   1.0
2000-01-01 00:01:30   NaN
2000-01-01 00:02:00   2.0
Freq: 30S, dtype: float64

Ресемплируйте ряд в бины по 30 секунд и заполните NaN значения с использованием метода pad.

>>> series.resample('30S').pad()[0:5]
2000-01-01 00:00:00    0
2000-01-01 00:00:30    0
2000-01-01 00:01:00    1
2000-01-01 00:01:30    1
2000-01-01 00:02:00    2
Freq: 30S, dtype: int64

Ресемплируйте ряд в бины по 30 секунд и заполните NaN значения с использованием метода bfill.

>>> series.resample('30S').bfill()[0:5]
2000-01-01 00:00:00    0
2000-01-01 00:00:30    1
2000-01-01 00:01:00    1
2000-01-01 00:01:30    2
2000-01-01 00:02:00    2
Freq: 30S, dtype: int64

Передайте пользовательскую функцию с помощью apply

>>> def custom_resampler(array_like):
...     return np.sum(array_like)+5
>>> series.resample('3T').apply(custom_resampler)
2000-01-01 00:00:00     8
2000-01-01 00:03:00    17
2000-01-01 00:06:00    26
Freq: 3T, dtype: int64

Для Series с PeriodIndex можно использовать ключевое слово convention для управления использованием начала или конца rule.

>>> s = pd.Series([1, 2], index=pd.period_range('2012-01-01',
                                                freq='A',
                                                periods=2))
>>> s
2012    1
2013    2
Freq: A-DEC, dtype: int64

Ресемплируйте по месяцам с использованием ‘start’ convention. Значения присваиваются первому месяцу периода.

>>> s.resample('M', convention='start').asfreq().head()
2012-01    1.0
2012-02    NaN
2012-03    NaN
2012-04    NaN
2012-05    NaN
Freq: M, dtype: float64

Ресемплируйте по месяцам с использованием ‘end’ convention. Значения присваиваются последнему месяцу периода.

>>> s.resample('M', convention='end').asfreq()
2012-12    1.0
2013-01    NaN
2013-02    NaN
2013-03    NaN
2013-04    NaN
2013-05    NaN
2013-06    NaN
2013-07    NaN
2013-08    NaN
2013-09    NaN
2013-10    NaN
2013-11    NaN
2013-12    2.0
Freq: M, dtype: float64

Для объектов DataFrame можно использовать ключевое слово on для указания столбца вместо индекса для ресемплирования.

>>> df = pd.DataFrame(data=9*[range(4)], columns=['a', 'b', 'c', 'd'])
>>> df['time'] = pd.date_range('1/1/2000', periods=9, freq='T')
>>> df.resample('3T', on='time').sum()
                     a  b  c  d
time
2000-01-01 00:00:00  0  3  6  9
2000-01-01 00:03:00  0  3  6  9
2000-01-01 00:06:00  0  3  6  9

Для DataFrame с MultiIndex можно использовать ключевое слово level для указания уровня, на котором необходимо выполнить ресемплирование.

>>> time = pd.date_range('1/1/2000', periods=5, freq='T')
>>> df2 = pd.DataFrame(data=10*[range(4)],
                       columns=['a', 'b', 'c', 'd'],
                       index=pd.MultiIndex.from_product([time, [1, 2]])
                       )
>>> df2.resample('3T', level=0).sum()
                     a  b   c   d
2000-01-01 00:00:00  0  6  12  18
2000-01-01 00:03:00  0  4   8  12

© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Series.resample.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API