示例数据:
import pandas as pd
from datetime import timedelta, datetime
from random import randint
base_index = [datetime(2012, 12, 31, 23, 55 + x) for x in range(5)]
index1 = [x + timedelta(seconds=randint(0, 10)) for x in base_index]
index2 = [x + timedelta(seconds=randint(0, 10)) for x in base_index]
ts1 = pd.Series(range(5), index=index1)
ts2 = pd.Series(range(5), index=index2)
这导致这些时间序列:
2012-12-31 23:55:03 0
2012-12-31 23:56:07 1
2012-12-31 23:57:01 2
2012-12-31 23:58:01 3
2012-12-31 23:59:03 4
2012-12-31 23:55:03 0
2012-12-31 23:56:09 1
2012-12-31 23:57:09 2
2012-12-31 23:58:04 3
2012-12-31 23:59:01 4
现在我希望在ts1的索引处对ts2进行采样,并从ts1中减去这些值。结果应该是浮点数非常接近零的时间序列。我最接近的是:
df = pd.DataFrame({"ts1": ts1, "ts2": ts2})
df["ts3"] = df["ts2"].interpolate(method="time")
df["ts4"] = df["ts1"] - df["ts3"]
result = df["ts4"].dropna()
它给出了我想要的结果:
2012-12-31 23:55:03 0.000000
2012-12-31 23:56:07 0.030303
2012-12-31 23:57:01 0.133333
2012-12-31 23:58:01 0.054545
2012-12-31 23:59:03 0.000000
但它不是很漂亮。还有更好的方法吗?
答案 0 :(得分:2)
我认为你的解决方案是合理的。将两个时间序列放在框架中会自动对齐它们。
这是另一种方式
对齐系列(基本上结合他们的索引)
In [30]: ats1,ats2 = ts1.align(ts2)
对齐系列的插值输出
In [32]: ats2.interpolate(method='time')
Out[32]:
2012-12-31 23:55:00 0.000000
2012-12-31 23:56:09 0.985714
2012-12-31 23:56:10 1.000000
2012-12-31 23:57:00 1.980392
2012-12-31 23:57:01 2.000000
2012-12-31 23:58:00 3.000000
2012-12-31 23:58:07 3.100000
2012-12-31 23:59:04 3.914286
2012-12-31 23:59:10 4.000000
dtype: float64
仅显示原始ts1中的值
In [33]: ats2.interpolate(method='time').reindex_like(ts1)
Out[33]:
2012-12-31 23:55:00 0.000000
2012-12-31 23:56:09 0.985714
2012-12-31 23:57:00 1.980392
2012-12-31 23:58:07 3.100000
2012-12-31 23:59:04 3.914286
dtype: float64
In [34]: ts1
Out[34]:
2012-12-31 23:55:00 0
2012-12-31 23:56:09 1
2012-12-31 23:57:00 2
2012-12-31 23:58:07 3
2012-12-31 23:59:04 4
dtype: int64
In [35]:
插值并消除原始值并显示差异
In [31]: ts1-ats2.interpolate(method='time').reindex_like(ts1)
Out[31]:
2012-12-31 23:55:00 0.000000
2012-12-31 23:56:09 0.014286
2012-12-31 23:57:00 0.019608
2012-12-31 23:58:07 -0.100000
2012-12-31 23:59:04 0.085714
dtype: float64