2017-09-13 102 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') 

由于您没有提供个别系列的片段,因此很难尝试代码并在此处显示输出。