我想合并两个数据帧,以创建一个具有两个变量的单一时间序列。
我有一个函数通过使用iterows()迭代每个数据帧来实现这一点…这是非常慢的,并且没有利用pandas和numpy提供的矢量化…
你能帮忙吗?
下面的代码说明了我要做的事情:
a = pd.DataFrame(data={'timestamp':[1,2,5,6,10],'x':[2,6,3,4,2]})
b = pd.DataFrame(data={'timestamp':[2,3,4,10],'y':[3,1,2,1]})
#z = Magical line of code/function call here
#z output: {'timestamp':[1,2,3,4,5,6,10],'x':[2,6,6,6,3,4,2], 'y':[NaN,3,1,2,2,2,1] }
这可以分为两个步骤:
- 第一步相当于SQL中的外连接,其中创建一个包含两个源表的键的表。这是通过
merge(..., how="outer")
完成的第二个是用之前的非NaN值填充NaN,这可以用
ffill
完成z = a.merge(b, on="timestamp", how="outer").sort_values("timestamp").ffill()