2017-07-03 87 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

謝謝,這是一個聰明的解決方案。 –