2017-09-13 101 views
2

我期待將幾個時間序列與變化的日期組合到一個數據框中。數組長度與索引長度不匹配

每個時間序列列名datepx

我創建了一個日期索引dates,並試圖通過做所有的時間序列組合:

dates = pd.date_range('01/01/2017', periods=12, freq='M')

df = pd.DataFrame({ 
    'date': dates, 
    'a': df2['px'], 
    'b': df3['px'] 
    . 
    . 
    etc 
}) 

預期輸出:

 date   a   b   c   d   e 
2017-01-31 -0.4579   nan   .   .   . 
2017-02-28  0.5787   nan   .   .   . 
2017-03-31 -2.2319  -1.0244   etc   etc   etc 
2017-04-30 -2.0713  -2.1069 
2017-05-31  nan  2.0158 
2017-06-30  nan  1.0541 
2017-07-31  nan  1.8901 
2017-08-31  nan   nan 
2017-09-30  nan   nan 
. 
. 
etc 

回答

2

IIUC:

dfs = [df1,df2,df3] 
pd.concat([df.set_index('date') for df in dfs], axis=1).reset_index() 
+0

這是偉大的!最好是使用'df.columns'重命名列嗎? –

+1

@ J.D.Marlin,這取決於...你想如何命名它們? – MaxU

+0

大概高達30左右。每個單獨的時間序列都有'date','px','px_2','px_3'等,並且當它們連接在一起時,我希望它們成爲'a',''a_2','a_3','b', 'b_2','b_3'等 –

2

數據幀的所有列必須具有相同的長度,因此您無法從一系列不同長度的數據幀中創建數據幀。您可以在參數how ='outer'的情況下使用多重合並,就像這樣。

df1.merge(df2, on = 'date', how = 'outer').merge(df3, on = 'date', how = 'outer') 

由於您沒有提供個別系列的片段,因此很難嘗試代碼並在此處顯示輸出。