Spec-Zone.ru › pandas 0.25

pandas.Series.resample

Series.resample(self, 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 : DateOffset, Timedelta or str

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

how : str

Метод для понижения/повышения частоты дискретизации, по умолчанию 'mean' для понижения частоты дискретизации.

Устаревшее с версии 0.18.0: Новый синтаксис — .resample(...).mean(), или .resample(...).apply(<func>)

axis : {0 or ‘index’, 1 or ‘columns’}, default 0

Ось для повышения или понижения частоты дискретизации. Для Series по умолчанию 0, т.е. по строкам. Должно быть DatetimeIndex, TimedeltaIndex или PeriodIndex.

fill_method : str, default None

Метод заполнения для повышения частоты дискретизации.

Устаревшее с версии 0.18.0: Новый синтаксис — .resample(...).<func>(), например .resample(...).pad()

closed : {‘right’, ‘left’}, default None

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

label : {‘right’, ‘left’}, default None

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

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

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

kind : {‘timestamp’, ‘period’}, optional, default None

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

loffset : timedelta, default None

Настройка меток ресемплированного времени.

limit : int, default None

Максимальный размер разрыва при повторной индексации с fill_method.

Устаревшее с версии 0.18.0.

base : int, default 0

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

on : str, optional

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

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

level : str or int, optional

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

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

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

См. также

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

Примечания

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

Для получения дополнительной информации о строках смещения см. ссылку.

Примеры

Начните с создания серии с 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.

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

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

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

>>> 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
>>> s.resample('Q', convention='start').asfreq()
2012Q1    1.0
2012Q2    NaN
2012Q3    NaN
2012Q4    NaN
2013Q1    2.0
2013Q2    NaN
2013Q3    NaN
2013Q4    NaN
Freq: Q-DEC, dtype: float64

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

>>> q = pd.Series([1, 2, 3, 4], index=pd.period_range('2018-01-01',
...                                                   freq='Q',
...                                                   periods=4))
>>> q
2018Q1    1
2018Q2    2
2018Q3    3
2018Q4    4
Freq: Q-DEC, dtype: int64
>>> q.resample('M', convention='end').asfreq()
2018-03    1.0
2018-04    NaN
2018-05    NaN
2018-06    2.0
2018-07    NaN
2018-08    NaN
2018-09    3.0
2018-10    NaN
2018-11    NaN
2018-12    4.0
Freq: M, dtype: float64

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

>>> d = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],
...           'volume': [50, 60, 40, 100, 50, 100, 40, 50]})
>>> df = pd.DataFrame(d)
>>> df['week_starting'] = pd.date_range('01/01/2018',
...                                     periods=8,
...                                     freq='W')
>>> df
   price  volume week_starting
0     10      50    2018-01-07
1     11      60    2018-01-14
2      9      40    2018-01-21
3     13     100    2018-01-28
4     14      50    2018-02-04
5     18     100    2018-02-11
6     17      40    2018-02-18
7     19      50    2018-02-25
>>> df.resample('M', on='week_starting').mean()
               price  volume
week_starting
2018-01-31     10.75    62.5
2018-02-28     17.00    60.0

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

>>> days = pd.date_range('1/1/2000', periods=4, freq='D')
>>> d2 = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],
...            'volume': [50, 60, 40, 100, 50, 100, 40, 50]})
>>> df2 = pd.DataFrame(d2,
...                    index=pd.MultiIndex.from_product([days,
...                                                     ['morning',
...                                                      'afternoon']]
...                                                     ))
>>> df2
                      price  volume
2000-01-01 morning       10      50
           afternoon     11      60
2000-01-02 morning        9      40
           afternoon     13     100
2000-01-03 morning       14      50
           afternoon     18     100
2000-01-04 morning       17      40
           afternoon     19      50
>>> df2.resample('D', level=0).sum()
            price  volume
2000-01-01     21     110
2000-01-02     22     140
2000-01-03     32     150
2000-01-04     36      90

© 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.25.0/reference/api/pandas.Series.resample.html

Spec-Zone.ru

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