Я пытаюсь рассчитать год от года к году.
Я написал что-то, что «работает», но я не думаю, что это хорошо, потому что я вижу, как это ломается, если у меня отсутствуют данные.
Кто-нибудь мог бы посоветовать, если есть более элегантный и или надежный способ добиться этого?
только чтобы прояснить:
скажем, у меня январь 2018 = 10, а февраль 2018 = 30, затем февраль 2018 с начала года = 10 + 30 = 40
затем январь 2017 года = 5, и февраль 2017 года = 15, а затем февраль 2017 года по состоянию на дату = 5 + 15 = 20
, поэтому я хотел бы, чтобы изменение в годовом исчислении за январь 2018 года = 10/5 - 1 = 100% и изменение в годовом исчислении за февраль 2018 года = 40/20 - 1 = 100%
вот пример кода с моей попыткой.
Любая обратная связь наиболее ценится.
import pandas as pd
import numpy as np
df1 = pd.DataFrame(columns=["YEAR", "MONTH", "VALUE"], dtype= np.float64)
i = 0
for year in range(2014, 2018, 1):
for month in range(1, 13, 1):
i += 1
#print ('year ' + str(year) + ' month ' + str(month))
df1.at[i - 1, 'YEAR'] = year
df1.at[i - 1, 'MONTH'] = month
df1.at[i - 1, 'VALUE'] = i
df1.at[48, 'YEAR'] = 2018
df1.at[48, 'MONTH'] = 1
df1.at[48, 'VALUE'] = 10
df1.at[49, 'YEAR'] = 2018
df1.at[49, 'MONTH'] = 2
df1.at[49, 'VALUE'] = 34
df1.at[50, 'YEAR'] = 2013
df1.at[50, 'MONTH'] = 12
df1.at[50, 'VALUE'] = 25
yearlist = df1['YEAR'].unique()
df1.sort_values(by=['YEAR', 'MONTH'], ascending=[True, True], inplace=True)
for year in yearlist:
df1.loc[df1['YEAR'] == year, 'ACC'] = df1[df1['YEAR'] == year]['VALUE'].rolling(min_periods=1, window=12).sum()
df1.sort_values(by=['YEAR', 'MONTH'], ascending=[False, False], inplace=True)
df1['CHANGE'] = df1['ACC'] / df1['ACC'].shift(-12) - 1
df1.sort_values(by=['YEAR', 'MONTH'], ascending=[True, True], inplace=True)