我定期测量一组值。说:
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在resample
,reindex
等地方有这个功能,但我无法理解它。
答案 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
}
});