Spec-Zone.ru › pandas 0.24

pandas.Panel.resample

Panel.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.Panel.resample.html

Spec-Zone.ru

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