在熊猫中将一个时间序列插入到另一个时间序列中

时间:2013-09-23 08:54:39

标签: python numpy pandas

我定期测量一组值。说:

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等地方有这个功能,但我无法理解它。

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分: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]

答案 2 :(得分:0)

这是一个干净的衬垫:

$('.pop').popover({
    html: true,
    title: function() {
        return $("#popover-head").html();
    },
    content: function() {
        $('#hidden-input').val(this.id);
        return $("#popover-content").html();
    },
    callback: function(){
    // validation codes
    }
});