6.22. DataFrame Rolling

  • .resample(freq)

  • .rolling(window=10)

  • .shift(periods=1, freq="D")

  • .diff()

6.22.1. SetUp

>>> import pandas as pd
>>>
>>>
>>> df = pd.DataFrame([
...     {'firstname': 'Alice', 'lastname': 'Apricot', 'age': 30},
...     {'firstname': 'Bob', 'lastname': 'Blackthorn', 'age': 31},
...     {'firstname': 'Carol', 'lastname': 'Corn', 'age': 32},
...     {'firstname': 'Dave', 'lastname': 'Durian', 'age': 33},
...     {'firstname': 'Eve', 'lastname': 'Elderberry', 'age': 34},
...     {'firstname': 'Mallory', 'lastname': 'Melon', 'age': 15},
... ], index=pd.date_range('2000-01-01', periods=6))
>>> df
           firstname    lastname  age
2000-01-01     Alice     Apricot   30
2000-01-02       Bob  Blackthorn   31
2000-01-03     Carol        Corn   32
2000-01-04      Dave      Durian   33
2000-01-05       Eve  Elderberry   34
2000-01-06   Mallory       Melon   15

6.22.2. Rolling

  • Compute rolling statistics

  • Series.rolling(window=10)

  • DataFrame.rolling(window=10)

../../_images/pandas-dataframe-stats-rolling.png

Figure 6.17. Rolling Average

>>> df['age'].rolling(window=3)
Rolling [window=3,center=False,method=single]
>>> df['age'].rolling(window=3).mean()
2000-01-01          NaN
2000-01-02          NaN
2000-01-03    31.000000
2000-01-04    32.000000
2000-01-05    33.000000
2000-01-06    27.333333
Freq: D, Name: age, dtype: float64

6.22.3. Resample

  • Resample time-series data to a different frequency

  • Series.resample(freq)

  • DataFrame.resample(freq)

>>> df['age'].resample('W')
<pandas.core.resample.DatetimeIndexResampler object at 0x...>
>>> df['age'].resample('W').mean()
2000-01-02    30.5
2000-01-09    28.5
Freq: W-SUN, Name: age, dtype: float64

6.22.4. Shift

  • Subtract DataFrame object from other shifted by index

  • DataFrame.shift(periods=1, freq="D")

  • Series.shift(periods=1, freq="D")

>>> df['age'] - df['age'].shift(periods=1, freq='D')
2000-01-01     NaN
2000-01-02     1.0
2000-01-03     1.0
2000-01-04     1.0
2000-01-05     1.0
2000-01-06   -19.0
2000-01-07     NaN
Freq: D, Name: age, dtype: float64

6.22.5. Diff

  • Subtract next row from the previous

  • DataFrame.diff(periods=1)

  • Series.diff(periods=1)

>>> df['age'].diff()
2000-01-01     NaN
2000-01-02     1.0
2000-01-03     1.0
2000-01-04     1.0
2000-01-05     1.0
2000-01-06   -19.0
Freq: D, Name: age, dtype: float64
>>> df['age'].diff(2)
2000-01-01     NaN
2000-01-02     NaN
2000-01-03     2.0
2000-01-04     2.0
2000-01-05     2.0
2000-01-06   -18.0
Freq: D, Name: age, dtype: float64