2017-09-13 9 views
2

さまざまな日付のタイムシリーズを1つのデータフレームに結合することを検討しています。配列の長さがインデックスの長さと一致しません

たびシリーズのカラム名は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') 

個別のシリーズのスニペットを提供していないので、コードを試してここに出力するのは難しいです。

関連する問題