How to group the cumulative sum of rain values into a new column for given timestamps

Viewed 68

I have a timeseries dataframe of rain values for every given hour.

This is the current dataframe:

print(assomption_rain_df.head(25))

          date      time  rain_gauge_value        
0   2020-08-05  00:00:00               5.3                  
1   2020-08-05  01:00:00               2.7                  
2   2020-08-05  02:00:00               2.2                  
3   2020-08-05  03:00:00               3.0                  
4   2020-08-05  04:00:00               1.5     
5   2020-08-05  05:00:00               0.0     
6   2020-08-05  06:00:00               0.0     
7   2020-08-05  07:00:00               0.0     
8   2020-08-05  08:00:00               0.1     
9   2020-08-05  09:00:00               0.1     
10  2020-08-05  10:00:00               0.1     
11  2020-08-05  11:00:00               0.4     
12  2020-08-05  12:00:00               0.5     
13  2020-08-05  13:00:00               0.2     
14  2020-08-05  14:00:00               0.3     
15  2020-08-05  15:00:00               0.4     
16  2020-08-05  16:00:00               0.2     
17  2020-08-05  17:00:00               0.0     
18  2020-08-05  18:00:00               0.0    
19  2020-08-05  19:00:00               0.0     
20  2020-08-05  20:00:00               0.0     
21  2020-08-05  21:00:00               0.0     
22  2020-08-05  22:00:00               0.0     
23  2020-08-05  23:00:00               0.0    
24  2020-08-06  00:00:00               0.0  

This is the dataframe that I want:

          date      time  rain_gauge_value rain_gauge_value_6hr       
0   2020-08-05  00:00:00               5.3                  NaN
1   2020-08-05  01:00:00               2.7                  NaN
2   2020-08-05  02:00:00               2.2                  NaN
3   2020-08-05  03:00:00               3.0                  NaN
4   2020-08-05  04:00:00               1.5                  NaN
5   2020-08-05  05:00:00               0.0                 14.7
6   2020-08-05  06:00:00               0.0                  9.4
7   2020-08-05  07:00:00               0.0                  6.7
8   2020-08-05  08:00:00               0.1                  4.6
9   2020-08-05  09:00:00               0.1                  1.7
10  2020-08-05  10:00:00               0.1                  0.3
11  2020-08-05  11:00:00               0.4                  0.7
12  2020-08-05  12:00:00               0.5                  1.2
13  2020-08-05  13:00:00               0.2                  1.4
14  2020-08-05  14:00:00               0.3                  1.6   
15  2020-08-05  15:00:00               0.4                  1.9
16  2020-08-05  16:00:00               0.2                  2.0
17  2020-08-05  17:00:00               0.0                  1.6
18  2020-08-05  18:00:00               0.0                  1.1
19  2020-08-05  19:00:00               0.0                  0.9
20  2020-08-05  20:00:00               0.0                  0.6
21  2020-08-05  21:00:00               0.0                  0.2
22  2020-08-05  22:00:00               0.0                  0.0
23  2020-08-05  23:00:00               0.0                  0.0
24  2020-08-06  00:00:00               0.0                  0.0

Ultimately, I'm looking to create columns rain_gauge_value_6hr, rain_gauge_value_12hr, rain_gauge_value_24hr, rain_gauge_value_36hr, rain_gauge_value_48hr

I've read some similar posts that included the pandas.Grouper or pandas.DataFrame.resample but none of them really applied to my situation. How do I implement this?

Edit:

First i tried:

assomption_rain_df['rain_gauge_value_6hr'] = assomption_rain_df['rain_gauge_value'].rolling(6).sum()

But it returns a dataframe with awkward values:

print(assomption_rain_df.head(25))

          date      time  rain_gauge_value  rain_gauge_value_6hr
0   2020-08-05  00:00:00               5.3                   NaN
1   2020-08-05  01:00:00               2.7                   NaN
2   2020-08-05  02:00:00               2.2                   NaN
3   2020-08-05  03:00:00               3.0                   NaN
4   2020-08-05  04:00:00               1.5                   NaN
5   2020-08-05  05:00:00               0.0          1.470000e+01
6   2020-08-05  06:00:00               0.0          9.400000e+00
7   2020-08-05  07:00:00               0.0          6.700000e+00
8   2020-08-05  08:00:00               0.1          4.600000e+00
9   2020-08-05  09:00:00               0.1          1.700000e+00
10  2020-08-05  10:00:00               0.1          3.000000e-01
11  2020-08-05  11:00:00               0.4          7.000000e-01
12  2020-08-05  12:00:00               0.5          1.200000e+00
13  2020-08-05  13:00:00               0.2          1.400000e+00
14  2020-08-05  14:00:00               0.3          1.600000e+00
15  2020-08-05  15:00:00               0.4          1.900000e+00
16  2020-08-05  16:00:00               0.2          2.000000e+00
17  2020-08-05  17:00:00               0.0          1.600000e+00
18  2020-08-05  18:00:00               0.0          1.100000e+00
19  2020-08-05  19:00:00               0.0          9.000000e-01
20  2020-08-05  20:00:00               0.0          6.000000e-01
21  2020-08-05  21:00:00               0.0          2.000000e-01
22  2020-08-05  22:00:00               0.0         -2.609024e-15
23  2020-08-05  23:00:00               0.0         -2.609024e-15
24  2020-08-06  00:00:00               0.0         -2.609024e-15
1 Answers

You are looking for DataFrame.rolling. It creates a rolling window of size n that you can perform operations with.

You want

df["rain_gauge_value_6hr"] = df["rain_gauge_value"].rolling(6).sum()
Related