2013-09-23 10 views
5

Mam jeden zestaw wartości mierzony w regularnych odstępach czasu. Powiedzieć:Interpolowanie jednej serii czasowej na inną w pandach

import pandas as pd 
import numpy as np 
rng = pd.date_range('2013-01-01', periods=12, freq='H') 
data = pd.Series(np.random.randn(len(rng)), index=rng) 

A inny zestaw bardziej arbitralne razy, na przykład, (w rzeczywistości te czasy nie są regularne sekwencja)

ts_rng = pd.date_range('2013-01-01 01:11:21', periods=7, freq='87Min') 
ts = pd.Series(index=ts_rng) 

Chcę poznać wartość danych interpolowana w czasach w ts.
mogę to zrobić w numpy:

x = np.asarray(ts_rng,dtype=np.float64) 
xp = np.asarray(data.index,dtype=np.float64) 
fp = np.asarray(data) 
ts[:] = np.interp(x,xp,fp) 

Ale czuję pandy ma tę funkcjonalność gdzieś w resample, reindex itp ale nie mogę dość je zdobyć.

Odpowiedz

7

Można łączyć dwie serie czasowe i sortować według indeksu. Ponieważ wartości w drugiej serii są NaN można interpolate a wystarczy wybrać się wartości, które stanowią punkty z drugiej serii:

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

lub

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

Trzeba użyć method = „wartości” dla kluczowych argumentów w interpolować, aby uzyskać taki sam odpowiedź jak w numpy pd.concat ([data, ts]). sort_index(). interpolate (method = 'values') [ts.index] – elfnor

+2

Zwróć uwagę na indeksy, które pojawiają się zarówno w ts, jak iw danych – tschm

4

zakładamy chcesz ocenić szereg czasowy ts na innym datetime_index. Ten indeks i indeks ts mogą się nakładać. Polecam użyć poniższej groupby trick. To zasadniczo pozbywa się wątpliwych podwójnych znaczków. I wtedy do przodu interpolacji ale czuć się swobodnie stosować metody bardziej fantazyjne

def interpolate(ts, datetime_index): 
    x = pd.concat([ts, pd.TimeSeries(index=datetime_index)]) 
    return x.groupby(x.index).first().sort_index().fillna(method="ffill")[datetime_index] 
0

Oto czyste jeden liner:

ts = np.interp(ts_rng.asi8 ,data.index.asi8, data[0]) 
Powiązane problemy