我正在处理两个以时间戳为索引的 Pandas 系列。一个系列是具有固定频率的粗糙模型,另一个是没有固定频率的数据。我想从数据中减去模型并(线性或样条)插入模型的值。
这是一个例子:
import numpy as np
import pandas as pd
# generate model with fixed freq
model = pd.Series(range(5),index=pd.date_range('2017-06-19T12:05:00', '2017-06-19T12:25:00', freq="5 min"))
# generate data and add more_data to make frequency irregular
data = pd.Series(np.arange(10)+0.3,index=pd.date_range('2017-06-19T12:06:00',
'2017-06-19T12:24:00', freq="2 min"))
more_data = pd.Series([-10, -20], index=[pd.Timestamp('2017-06-19T12:07:35'),
pd.Timestamp('2017-06-19T12:09:10')])
data = data.append(more_data).sort_index()
我试过了
data - model.interpolate()[data.index]
但这只会给我非 NaN 值,其中模型的时间戳和数据重叠。
我知道我可以对数据重新采样以适应模型的频率 (),但我确实希望在数据的原始时间戳处将数据减去模型。
最佳答案
所以在this的帮助下answer 我找到了我的问题的解决方案,只在实际需要的点进行插值:
首先,生成一系列带有data
时间戳的NaN:
na = pd.Series(None, data.index)
并将其与模型结合起来:
combi = model.combine_first(na)
现在可以从数据中插入和减去这个系列
(data - combi.interpolate(method='time'))[data.index]
或作为单行
(data - model.combine_first(pd.Series(None, data.index)).interpolate(method='time'))[data.index]
关于python - 通过插值减去 Pandas 中具有不规则和规则时间戳的两个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635090/