2017-07-03 89 views
2

均匀地间隔的时间序列我有两个均匀地间隔的时间序列:合并两个Python中

 time X1 
1234567000 96.32 
1234567005 96.01 
1234567009 96.05 

     time X2 
1234567001 23.88 
1234567005 23.96 

我想将它们合并:

 time X1 X2 
1234567000 96.32 nan 
1234567001 nan 23.88 
1234567005 96.01 23.96 
1234567009 96.05 nan 

我怎样才能在Python这样做呢?我愿意使用软件包,例如大熊猫。

time是整数(它不是UNIX时间戳)。 X1X2是浮动的。

+0

对不起,我会听起来哑巴,但你的时间系列是变量的类型?我会猜测熊猫系列,也许这会让我少笨拙:p –

+0

@RayhaneMama时间是整数。 X1和X2都是浮动的。 –

回答

1

如果你想用大熊猫,您首先格式化您的输入,熊猫dataframes喜欢如下:

import pandas as pd 

s1 = pd.DataFrame({ 
    'time':[1234567000,1234567005,1234567009], 
    'X1':[96.32,96.01,96.05] 
},columns=['time','X1']) # to keep columns order 

s2 = pd.DataFrame({ 
    'time':[1234567001,1234567005], 
    'X2':[23.88,23.96] 
},columns=['time','X2']) # to keep columns order 

,然后简单地merge他们这一行:

df = pd.merge(s1,s2,how='outer') 

如果你想要的时间值为sorted而不是:

df = pd.merge(s1,s2,how='outer').sort_values(by='time') 
+1

谢谢,它也很棒。 –

+0

关于[外部合并两个数据帧到位在熊猫](https://stackoverflow.com/q/44937462/395857)的任何想法? –

2

这是一种超级天真的合并方式。首先格式化你的两个系列,使它们是字典,定义一个行对象,然后遍历每个系列的每个元素,将它的条目添加到行对象。

from collections import defaultdict 

class series_row: 
    def __init__(self): 
     self.x1 = 'nan' 
     self.x2 = 'nan' 

    def __repr__(self): 
     return f"{self.x1}, {self.x2}" 


series1 = { 
    1234567000: 96.32, 
    1234567005: 96.01, 
    1234567009: 96.05, 
} 

series2 = { 
    1234567001: 23.88, 
    1234567005: 23.96 
} 


merged_series = defaultdict(series_row) 

for k, v in series1.items(): 
    merged_series[k].x1 = v 

for k, v in series2.items(): 
    merged_series[k].x2 = v 

for entry in merged_series.items(): 
    print(entry) 
+0

谢谢,这是一个聪明的解决方案。 –