In [1]:
import pandas as pd

In [2]:
df = pd.DataFrame({'value': [1, 15, 31]},
                  index=pd.to_datetime(['2018-01-01', '2018-01-15', '2018-01-31']))

In [3]:
print(df)


            value
2018-01-01      1
2018-01-15     15
2018-01-31     31

In [4]:
print(df.asfreq('5D'))


            value
2018-01-01    1.0
2018-01-06    NaN
2018-01-11    NaN
2018-01-16    NaN
2018-01-21    NaN
2018-01-26    NaN
2018-01-31   31.0

In [5]:
print(df.asfreq('5D', fill_value=15))


            value
2018-01-01      1
2018-01-06     15
2018-01-11     15
2018-01-16     15
2018-01-21     15
2018-01-26     15
2018-01-31     31

In [6]:
print(df.asfreq('5D', method='pad'))


            value
2018-01-01      1
2018-01-06      1
2018-01-11      1
2018-01-16     15
2018-01-21     15
2018-01-26     15
2018-01-31     31

In [7]:
print(df.asfreq('5D', method='bfill'))


            value
2018-01-01      1
2018-01-06     15
2018-01-11     15
2018-01-16     31
2018-01-21     31
2018-01-26     31
2018-01-31     31

In [8]:
print(df.resample('5D').ffill())


            value
2018-01-01      1
2018-01-06      1
2018-01-11      1
2018-01-16     15
2018-01-21     15
2018-01-26     15
2018-01-31     31

In [9]:
print(df.resample('5D').bfill())


            value
2018-01-01      1
2018-01-06     15
2018-01-11     15
2018-01-16     31
2018-01-21     31
2018-01-26     31
2018-01-31     31

In [10]:
print(df.resample('5D').nearest())


            value
2018-01-01      1
2018-01-06      1
2018-01-11     15
2018-01-16     15
2018-01-21     15
2018-01-26     31
2018-01-31     31

In [11]:
print(df.resample('5D').interpolate())


            value
2018-01-01    1.0
2018-01-06    6.0
2018-01-11   11.0
2018-01-16   16.0
2018-01-21   21.0
2018-01-26   26.0
2018-01-31   31.0

In [12]:
df.loc['2018-01-15', 'value'] = 100
print(df)


            value
2018-01-01      1
2018-01-15    100
2018-01-31     31

In [13]:
print(df.resample('5D').interpolate())


            value
2018-01-01    1.0
2018-01-06    6.0
2018-01-11   11.0
2018-01-16   16.0
2018-01-21   21.0
2018-01-26   26.0
2018-01-31   31.0

In [14]:
print(df.resample('D').interpolate())


                 value
2018-01-01    1.000000
2018-01-02    8.071429
2018-01-03   15.142857
2018-01-04   22.214286
2018-01-05   29.285714
2018-01-06   36.357143
2018-01-07   43.428571
2018-01-08   50.500000
2018-01-09   57.571429
2018-01-10   64.642857
2018-01-11   71.714286
2018-01-12   78.785714
2018-01-13   85.857143
2018-01-14   92.928571
2018-01-15  100.000000
2018-01-16   95.687500
2018-01-17   91.375000
2018-01-18   87.062500
2018-01-19   82.750000
2018-01-20   78.437500
2018-01-21   74.125000
2018-01-22   69.812500
2018-01-23   65.500000
2018-01-24   61.187500
2018-01-25   56.875000
2018-01-26   52.562500
2018-01-27   48.250000
2018-01-28   43.937500
2018-01-29   39.625000
2018-01-30   35.312500
2018-01-31   31.000000

In [15]:
print(df.resample('D').interpolate().asfreq('5D'))


                value
2018-01-01   1.000000
2018-01-06  36.357143
2018-01-11  71.714286
2018-01-16  95.687500
2018-01-21  74.125000
2018-01-26  52.562500
2018-01-31  31.000000

In [16]:
print(df.resample('D').interpolate('spline', order=2))


                 value
2018-01-01    1.000000
2018-01-02   13.004464
2018-01-03   24.250000
2018-01-04   34.736607
2018-01-05   44.464286
2018-01-06   53.433036
2018-01-07   61.642857
2018-01-08   69.093750
2018-01-09   75.785714
2018-01-10   81.718750
2018-01-11   86.892857
2018-01-12   91.308036
2018-01-13   94.964286
2018-01-14   97.861607
2018-01-15  100.000000
2018-01-16  101.379464
2018-01-17  102.000000
2018-01-18  101.861607
2018-01-19  100.964286
2018-01-20   99.308036
2018-01-21   96.892857
2018-01-22   93.718750
2018-01-23   89.785714
2018-01-24   85.093750
2018-01-25   79.642857
2018-01-26   73.433036
2018-01-27   66.464286
2018-01-28   58.736607
2018-01-29   50.250000
2018-01-30   41.004464
2018-01-31   31.000000

In [17]:
print(df.resample('D').interpolate('spline', order=2).asfreq('5D'))


                 value
2018-01-01    1.000000
2018-01-06   53.433036
2018-01-11   86.892857
2018-01-16  101.379464
2018-01-21   96.892857
2018-01-26   73.433036
2018-01-31   31.000000

In [18]:
df_nan = pd.DataFrame({'value': [1, pd.np.nan, pd.np.nan, pd.np.nan, 31]},
                      index=pd.to_datetime(['2018-01-01', '2018-01-02', '2018-01-15', '2018-01-20', '2018-01-31']))

In [19]:
print(df_nan)


            value
2018-01-01    1.0
2018-01-02    NaN
2018-01-15    NaN
2018-01-20    NaN
2018-01-31   31.0

In [20]:
print(df_nan.interpolate())


            value
2018-01-01    1.0
2018-01-02    8.5
2018-01-15   16.0
2018-01-20   23.5
2018-01-31   31.0

In [21]:
print(df_nan.interpolate('time'))


            value
2018-01-01    1.0
2018-01-02    2.0
2018-01-15   15.0
2018-01-20   20.0
2018-01-31   31.0