timeseries data we need to summate

TimeSeries Data we need to Summate

I need to generate a large amount of tabular data and then do some date-time summary on this...

So before I start that project - we need to understand Date-Time summation in Pandas.

import pandas as pd
from datetime import datetime,timedelta
from random import randint
loc=['NYC','LON','TOK']
data=[]

for days in range(1,365):
    for hours in range(1,24):
        for mins in range(1,60):
            dt=datetime(2018,1,1,hours,mins)+ timedelta(days=days,hours=hours,minutes=mins)
            value=1+randint(0,100)
            for l in range(len(loc)):

                data.append([dt,loc[l],value*(1+l)])
df = pd.DataFrame(data,columns=['When','Loc','Val'])
df.set_index(['When'],inplace=True)

Just check the output of data dataFrame

My fake stock exchange data is has 3 values per minute for NYC, Lon and Tok.

To check the maths, I have force earch series of numbers to be 1,2,3.

Lets see the data...

df.head(n=20)
Loc Val
When
2018-01-02 02:02:00 NYC 32
2018-01-02 02:02:00 LON 64
2018-01-02 02:02:00 TOK 96
2018-01-02 02:04:00 NYC 21
2018-01-02 02:04:00 LON 42
2018-01-02 02:04:00 TOK 63
2018-01-02 02:06:00 NYC 6
2018-01-02 02:06:00 LON 12
2018-01-02 02:06:00 TOK 18
2018-01-02 02:08:00 NYC 13
2018-01-02 02:08:00 LON 26
2018-01-02 02:08:00 TOK 39
2018-01-02 02:10:00 NYC 9
2018-01-02 02:10:00 LON 18
2018-01-02 02:10:00 TOK 27
2018-01-02 02:12:00 NYC 22
2018-01-02 02:12:00 LON 44
2018-01-02 02:12:00 TOK 66
2018-01-02 02:14:00 NYC 51
2018-01-02 02:14:00 LON 102

Summ by Hour

I set the Index after I created the DataFrom to being the datetime column. This makes life much easier.

  • Group by Loc
  • Sample per Hour
    • The Field Val
    • And sum() this value.
# Sum By Hour
df.groupby('Loc').resample('H')['Val'].sum()

And We get

Loc  When               
LON  2018-01-02 02:00:00     2274
     2018-01-02 03:00:00     3044
     2018-01-02 04:00:00     2834
     2018-01-02 05:00:00     2876
     2018-01-02 06:00:00     2852
     2018-01-02 07:00:00     3204
     2018-01-02 08:00:00     2646
     2018-01-02 09:00:00     3644
     2018-01-02 10:00:00     3338
     2018-01-02 11:00:00     3388
     2018-01-02 12:00:00     3148
     2018-01-02 13:00:00     3528
     2018-01-02 14:00:00     2604
     2018-01-02 15:00:00     2532
     2018-01-02 16:00:00     3150
     2018-01-02 17:00:00     2750
     2018-01-02 18:00:00     2694
     2018-01-02 19:00:00     2538
     2018-01-02 20:00:00     2752
     2018-01-02 21:00:00     3106
     2018-01-02 22:00:00     3064
     2018-01-02 23:00:00     2854
     2018-01-03 00:00:00     3326
     2018-01-03 01:00:00     3146
     2018-01-03 02:00:00     6176
     2018-01-03 03:00:00     6514
     2018-01-03 04:00:00     5996
     2018-01-03 05:00:00     6382
     2018-01-03 06:00:00     5758
     2018-01-03 07:00:00     6954
                            ...  
TOK  2018-12-31 18:00:00     8748
     2018-12-31 19:00:00     8991
     2018-12-31 20:00:00     8286
     2018-12-31 21:00:00    10038
     2018-12-31 22:00:00    10092
     2018-12-31 23:00:00     8709
     2019-01-01 00:00:00     4023
     2019-01-01 01:00:00     5004
     2019-01-01 02:00:00     4626
     2019-01-01 03:00:00     5187
     2019-01-01 04:00:00     4257
     2019-01-01 05:00:00     3903
     2019-01-01 06:00:00     4218
     2019-01-01 07:00:00     5394
     2019-01-01 08:00:00     3807
     2019-01-01 09:00:00     5007
     2019-01-01 10:00:00     4401
     2019-01-01 11:00:00     4941
     2019-01-01 12:00:00     5097
     2019-01-01 13:00:00     3300
     2019-01-01 14:00:00     4773
     2019-01-01 15:00:00     5349
     2019-01-01 16:00:00     4446
     2019-01-01 17:00:00     3981
     2019-01-01 18:00:00     4509
     2019-01-01 19:00:00     4215
     2019-01-01 20:00:00     4938
     2019-01-01 21:00:00     4032
     2019-01-01 22:00:00     4125
     2019-01-01 23:00:00     5142
Name: Val, Length: 26274, dtype: int64

Summ by Day

# Sum By Day
df.groupby('Loc').resample('D')['Val'].sum()
Loc  When      
LON  2018-01-02     64820
     2018-01-03    137864
     2018-01-04    136472
     2018-01-05    136682
     2018-01-06    138790
     2018-01-07    137978
     2018-01-08    142000
     2018-01-09    139452
     2018-01-10    140688
     2018-01-11    138200
     2018-01-12    141120
     2018-01-13    137706
     2018-01-14    137820
     2018-01-15    135664
     2018-01-16    138538
     2018-01-17    137720
     2018-01-18    135024
     2018-01-19    140990
     2018-01-20    138112
     2018-01-21    139716
     2018-01-22    137484
     2018-01-23    140330
     2018-01-24    136458
     2018-01-25    137548
     2018-01-26    138020
     2018-01-27    135892
     2018-01-28    135748
     2018-01-29    136252
     2018-01-30    134654
     2018-01-31    138830
                    ...  
TOK  2018-12-03    214746
     2018-12-04    199101
     2018-12-05    207087
     2018-12-06    210480
     2018-12-07    209196
     2018-12-08    207327
     2018-12-09    204645
     2018-12-10    207285
     2018-12-11    209277
     2018-12-12    203841
     2018-12-13    208542
     2018-12-14    209724
     2018-12-15    212595
     2018-12-16    205161
     2018-12-17    204849
     2018-12-18    211113
     2018-12-19    208824
     2018-12-20    211116
     2018-12-21    212142
     2018-12-22    208959
     2018-12-23    211122
     2018-12-24    201078
     2018-12-25    208125
     2018-12-26    207528
     2018-12-27    209397
     2018-12-28    210471
     2018-12-29    204912
     2018-12-30    205971
     2018-12-31    210513
     2019-01-01    108675
Name: Val, Length: 1095, dtype: int64

Summ by Month

# Sum By Month
df.groupby('Loc').resample('M')['Val'].sum()
Loc  When      
LON  2018-01-31    4066572
     2018-02-28    3875660
     2018-03-31    4316514
     2018-04-30    4167420
     2018-05-31    4295180
     2018-06-30    4128566
     2018-07-31    4292572
     2018-08-31    4276626
     2018-09-30    4135672
     2018-10-31    4297182
     2018-11-30    4168330
     2018-12-31    4307090
     2019-01-31      72450
NYC  2018-01-31    2033286
     2018-02-28    1937830
     2018-03-31    2158257
     2018-04-30    2083710
     2018-05-31    2147590
     2018-06-30    2064283
     2018-07-31    2146286
     2018-08-31    2138313
     2018-09-30    2067836
     2018-10-31    2148591
     2018-11-30    2084165
     2018-12-31    2153545
     2019-01-31      36225
TOK  2018-01-31    6099858
     2018-02-28    5813490
     2018-03-31    6474771
     2018-04-30    6251130
     2018-05-31    6442770
     2018-06-30    6192849
     2018-07-31    6438858
     2018-08-31    6414939
     2018-09-30    6203508
     2018-10-31    6445773
     2018-11-30    6252495
     2018-12-31    6460635
     2019-01-31     108675
Name: Val, dtype: int64

Summ by Year

# Sum By Year
df.groupby('Loc').resample('Y')['Val'].sum()
Loc  When      
LON  2018-12-31    50327384
     2019-12-31       72450
NYC  2018-12-31    25163692
     2019-12-31       36225
TOK  2018-12-31    75491076
     2019-12-31      108675
Name: Val, dtype: int64

Summary

Quite easy to do simple summations in Pandas.