【发布时间】:2014-10-22 21:06:41
【问题描述】:
这是我关于 stackoverflow 的第一个问题。放过我吧!
我有两个数据集由不同的采集系统以不同的采样率同时采集。一个是非常规律的,另一个则不是。我想创建一个包含两个数据集的单个数据框,使用规则间隔的时间戳(以秒为单位)作为两者的参考。不规则采样的数据应该在规则间隔的时间戳上插值。
这里有一些玩具数据展示了我正在尝试做的事情:
import pandas as pd
import numpy as np
# evenly spaced times
t1 = np.array([0,0.5,1.0,1.5,2.0])
y1 = t1
# unevenly spaced times
t2 = np.array([0,0.34,1.01,1.4,1.6,1.7,2.01])
y2 = 3*t2
df1 = pd.DataFrame(data={'y1':y1,'t':t1})
df2 = pd.DataFrame(data={'y2':y2,'t':t2})
df1 和 df2 如下所示:
df1:
t y1
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0
3 1.5 1.5
4 2.0 2.0
df2:
t y2
0 0.00 0.00
1 0.34 1.02
2 1.01 3.03
3 1.40 4.20
4 1.60 4.80
5 1.70 5.10
6 2.01 6.03
我正在尝试合并 df1 和 df2,在 df1.t 上插值 y2。期望的结果是:
df_combined:
t y1 y2
0 0.0 0.0 0.0
1 0.5 0.5 1.5
2 1.0 1.0 3.0
3 1.5 1.5 4.5
4 2.0 2.0 6.0
我一直在阅读 pandas.resample 的文档,以及搜索以前的 stackoverflow 问题,但无法找到针对我的特定问题的解决方案。有任何想法吗?看起来应该很容易。
更新: 我想出了一个可能的解决方案:先插入第二个系列,然后附加到第一个数据帧:
from scipy.interpolate import interp1d
f2 = interp1d(t2,y2,bounds_error=False)
df1['y2'] = f2(df1.t)
给出:
df1:
t y1 y2
0 0.0 0.0 0.0
1 0.5 0.5 1.5
2 1.0 1.0 3.0
3 1.5 1.5 4.5
4 2.0 2.0 6.0
这可行,但如果有更好的方法,我仍然愿意接受其他解决方案。
【问题讨论】:
-
您应该将您的编辑添加为答案,以便其他人可以找到它们
-
我在谷歌上搜索了一段时间。很好的回答你自己的帖子。谢谢!我认为这应该是 Pandas 中 DataFrames 的基本功能,但我想没有内部方法。
-
我刚刚从下面的@K3---rnc 看到了答案。似乎比我自己对自己的回答更干净,但看起来两者都可以正常工作。谢谢!