2017-09-13 3 views
2

Je cherche à combiner quelques séries temporelles avec des dates variables dans une seule trame de données.La longueur du tableau ne correspond pas à la longueur de l'index

Chaque nom de colonne séries chronologiques sont date et px

J'ai créé un index de date dates et a essayé de combiner toutes les séries de temps en faisant:

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

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

Expected Sortie:

 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 

Répondre

2

IIUC:

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

C'est génial! Est-il préférable de renommer les colonnes en utilisant juste 'df.columns'? –

+1

@ J.D.Marlin, ça dépend ... Comment voulez-vous les nommer? – MaxU

+0

Probablement jusqu'à 30 ou plus. Chaque série chronologique individuelle a 'date',' px', 'px_2',' px_3', etc et quand je les concatène, je les aimerais comme 'a',' 'a_2',' a_3', 'b', 'b_2',' b_3' etc. –

2

Toutes les colonnes de la trame de données doivent être de même longueur et vous ne pouvez donc pas créer de trame de données à partir de séries de longueur variable. Vous pouvez utiliser plusieurs fusionner dans votre cas avec le paramètre how = 'outer', quelque chose comme ça.

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

Puisque vous n'avez pas fourni des extraits de séries individuelles, il est difficile d'essayer le code et montrer la sortie ici.