2017-07-21 3 views
1

J'ai trois séries comme:Somme de trois séries avec un index datetime et des longueurs différentes?

Série 1:

Timestamp 
2017-04-02 21666.45 
2017-04-03 21666.45 
2017-04-04 21666.45 
2017-04-05 21666.45 
2017-04-06 21666.45 
Freq: D, Name: Price, dtype: float64 

Série 2:

Timestamp 
2017-04-02 9918.6 
2017-04-03 9918.6 
2017-04-04 9918.6 
2017-04-05 9918.6 
2017-04-06 9918.6 
Freq: D, Name: Price, dtype: float64 

Série 3:

Timestamp 
    2017-04-02 9769.55 
    2017-04-03 9769.55 
    2017-04-04 9769.55 
    2017-04-05 9769.55 
    2017-04-06 9769.55 
    2017-04-07 9769.55 
    Freq: D, Name: Price, dtype: float64 

Mais je reçois la somme en ajoutant toute la série jusqu'au 2017-04-06 seulement comme:

normal_sum['Price'] + peak_sum['Price'] + off_sum['Price'] 

Timestamp 
2017-04-02 41354.6 
2017-04-03 41354.6 
2017-04-04 41354.6 
2017-04-05 41354.6 
2017-04-06 41354.6 
2017-04-07 Nan 

Sortie prévue:

Timestamp 
2017-04-02 41354.6 
2017-04-03 41354.6 
2017-04-04 41354.6 
2017-04-05 41354.6 
2017-04-06 41354.6 
2017-04-07 9769.55 

Toute aide serait appréciée. Merci.

+0

Vous pouvez '.join' et' .fillna (0) 'avant d'ajouter. –

+0

Ou 'réduire (lambda l, r: l.add (r, fillna = 0), (série1, série2, série3))' si vous souhaitez éviter de créer une image intermédiaire. –

+0

@YakymPirozhenko, série 1 et série 2 n'a pas l'horodateur du 2017-04-07. – Dheeraj

Répondre

0

Je pense que vous avez besoin Series.add avec le paramètre fill_value:

df = normal_sum['Price'].add(peak_sum['Price'], fill_value=0) 
         .add(off_sum['Price'], fill_value=0) 
print (df) 
Timestamp 
2017-04-02 41354.60 
2017-04-03 41354.60 
2017-04-04 41354.60 
2017-04-05 41354.60 
2017-04-06 41354.60 
2017-04-07  9769.55 
Name: Price, dtype: float64 

Un peu changé Yakym Pirozhenko' s comment:

from functools import reduce 
cols = [normal_sum['Price'], peak_sum['Price'], off_sum['Price']] 

df = reduce(lambda l, r: l.add(r, fill_value=0), cols) 
print (df) 
Timestamp 
2017-04-02 41354.60 
2017-04-03 41354.60 
2017-04-04 41354.60 
2017-04-05 41354.60 
2017-04-06 41354.60 
2017-04-07  9769.55 
Name: Price, dtype: float64 
0

Dans ce cas, j'utilise généralement pd.concat, qui prend soin de joindre les indices:

df = pd.concat([normal_sum['Price'], peak_sum['Price'], off_sum['Price']], 
       axis=1).sum(axis=1)