Рассчитать изменение стоимости по дате и идентификатору в python - PullRequest
0 голосов
/ 23 января 2020

У меня есть фрейм данных, который содержит три столбца: идентификаторы, дату (всегда конец месяца) и значение для данного идентификатора на указанную дату. Значения меняются со временем и являются уникальными для идентификаторов. Как рассчитать изменение значения для данного идентификатора за один месяц до следующего (как в процентах, так и в абсолютном значении)?

Вот пример данных. Мне нужен новый столбец, в котором будет показано, что для идентификатора 1850 изменение с 2007-12-01 на 2008-01-01 составляет .0004 и т. Д. Для каждого идентификатора за каждый месяц за месяц. Всего ~ 100 тыс. Строк и ~ 1000 разных идентификаторов

Date                ID       value_
2007-12-01 00:00:00 1850    -0.0496133979294919
2008-01-01 00:00:00 1850    -0.0500387131996307
2008-02-01 00:00:00 1850    -0.0492422215808407
2007-02-01 00:00:00 4022    -0.0195919625346613
2007-03-01 00:00:00 4022    -0.0194071594854936
2007-04-01 00:00:00 4022    -0.00949770507514844
2007-05-01 00:00:00 4022    -0.00611289851053481
2007-06-01 00:00:00 4022    -0.00966828278354329
2007-07-01 00:00:00 4022    -0.010420327834716
2007-08-01 00:00:00 4022    -0.00374361336176163
2007-09-01 00:00:00 4022    -0.0217189168574824
2007-10-01 00:00:00 4022    -0.0210927493134818
2007-11-01 00:00:00 4022    -0.0208540558170204
2007-12-01 00:00:00 4022    -0.0281891859572789
2008-01-01 00:00:00 4022    -0.0342401666700859
2008-02-01 00:00:00 4022    -0.0345209140419046
2007-12-01 00:00:00 51667   -0.00457253924855003
2008-01-01 00:00:00 51667   -0.00613436134423086
2008-02-01 00:00:00 51667   -0.011212483689408
```)

1 Ответ

0 голосов
/ 23 января 2020

Убедитесь, что кадр данных отсортирован по ID и дате.

Группируйте по ID, используя diff () в столбце значений:

df['Date']= pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'])
df['diff'] = df.groupby('ID')['value_'].diff().fillna(0)
...