6

我有一组定期测量的值。说:

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)

还有一组更任意的时间,例如,(实际上这些时间不是一个规则的序列)

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

我想知道在 ts 中插入的数据的值。
我可以在 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)

但我觉得 pandas 在某个地方有这个功能 resamplereindex等等,但我不太明白。

4

3 回答 3

9

您可以连接两个时间序列并按索引排序。由于第二个系列中的值是NaN您可以interpolate选择的,并且只需从第二个系列中选择代表点的值:

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

或者

 pd.concat([data, ts]).sort_index().interpolate()[ts.index]
于 2013-09-23T09:49:25.160 回答
7

假设您想在不同的 datetime_index 上评估时间序列 ts。这个索引和ts的索引可能会重叠。我建议使用以下 groupby 技巧。这基本上摆脱了可疑的双重邮票。然后我向前插值,但可以随意应用更多花哨的方法

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]
于 2014-11-10T10:18:08.747 回答
0

这是一个干净的衬里:

ts = np.interp( ts_rng.asi8 ,data.index.asi8, data[0] )
于 2015-06-24T22:44:41.003 回答