Spec-Zone.ru › pandas 0.24

pandas.DataFrame.resample

DataFrame.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 : 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 значений с помощью метода 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.

Ресемплирование года по кварталам, используя ‘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.24.2/reference/api/pandas.DataFrame.resample.html

Spec-Zone.ru

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