год от года к году процентное изменение - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь рассчитать год от года к году. Я написал что-то, что «работает», но я не думаю, что это хорошо, потому что я вижу, как это ломается, если у меня отсутствуют данные.

Кто-нибудь мог бы посоветовать, если есть более элегантный и или надежный способ добиться этого?

только чтобы прояснить: скажем, у меня январь 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)

1 Ответ

0 голосов
/ 29 июня 2018

AFAIU все, пока df1.sortvalues... не готовит данные, но, по крайней мере, цикл for можно заменить на

df1['ACC'] = df1.groupby('YEAR').cumsum().VALUE

Расчет df['CHANGE'] для меня неясен, но если вы хотите разделить текущее значение на значение прошлого года и уменьшить его на единицу, то у вас уже все в порядке ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...