Source code for komanawa.basgra_nz_py.supporting_functions.cumulative_annual_data
"""
Author: Matt Hanson
Created: 14/10/2021 8:50 AM
"""
import pandas as pd
import numpy as np
[docs]
def make_cumuliative_annual(inseries, start_day, start_month):
"""
:param inseries: pd.Series with
:param start_day: int start day of the month (e.g. 1-31 for jan for calendar or 1jun for water year)
:param start_month: int start month (e.g. jan for calendar or jun for water year)
:return:
"""
assert isinstance(start_day, int)
assert isinstance(start_month, int)
assert isinstance(inseries, pd.Series)
out_data = pd.Series(index=inseries.index)
years = pd.unique(inseries.index.year)
start_date = pd.to_datetime(f'{years.min()-1}-{start_month:02d}-{start_day:02d}')
for i in range(len(years)+1):
end_date = start_date + pd.DateOffset(years=1, days=-1)
idx = (inseries.index.date >= start_date) & (inseries.index.date <= end_date)
out_data.loc[idx] = inseries.loc[idx].cumsum()
start_date = end_date + pd.DateOffset(days=1)
return out_data
if __name__ == '__main__':
np.random.seed(55)
test_data = pd.DataFrame(index=pd.date_range('2002-01-01', '2005-08-25'))
test_data.loc[:, 'test_flow'] = np.random.randint(0,5,len(test_data))
test_data.loc[:,'cum_sum'] = make_cumuliative_annual(test_data.loc[:,'test_flow'], 1,7)
pass