Interpolating one time series onto another in pandas

前端 未结 3 745
别那么骄傲
别那么骄傲 2021-02-09 16:24

I have one set of values measured at regular times. Say:

import pandas as pd
import numpy as np
rng = pd.date_range(\'2013-01-01\', periods=12, freq=\'H\')
data          


        
相关标签:
3条回答
  • 2021-02-09 17:00

    Assume you would like to evaluate a time series ts on a different datetime_index. This index and the index of ts may overlap. I recommend to use the following groupby trick. This essentially gets rid of dubious double stamps. I then forward interpolate but feel free to apply more fancy methods

    def interpolate(ts, datetime_index):
        x = pd.concat([ts, pd.Series(index=datetime_index)])
        return x.groupby(x.index).first().sort_index().fillna(method="ffill")[datetime_index]
    
    0 讨论(0)
  • 2021-02-09 17:07

    You can concatenate the two time series and sort by index. Since the values in the second series are NaN you can interpolate and the just select out the values that represent the points from the second series:

     pd.concat([data, ts]).sort_index().interpolate().reindex(ts.index)
    

    or

     pd.concat([data, ts]).sort_index().interpolate()[ts.index]
    
    0 讨论(0)
  • 2021-02-09 17:17

    Here's a clean one liner:

    ts = np.interp( ts_rng.asi8 ,data.index.asi8, data[0] )
    
    0 讨论(0)
提交回复
热议问题