У меня есть DataFrame, который выглядит следующим образом:
part price date
1 67.32 2018-12-01 00:00:00.000
3 99.16 2018-12-01 00:00:00.000
1 67.32 2018-11-01 00:00:00.000
3 167.34 2018-11-01 00:00:00.000
1 67.32 2018-10-01 00:00:00.000
3 167.34 2018-10-01 00:00:00.000
1 88.37 2018-09-01 00:00:00.000
3 212.70 2018-09-01 00:00:00.000
1 88.37 2018-08-01 00:00:00.000
3 264.02 2018-08-01 00:00:00.000
1 88.37 2018-07-01 00:00:00.000
3 264.02 2018-07-01 00:00:00.000
Я хочу создать новый столбец, назовите его price_change
, который отслеживает, как цена меняется от месяца к месяцу за часть.Таким образом, вышеприведенное выглядит так:
part price date price_change
1 67.32 2018-12-01 00:00:00.000 0.0
3 99.16 2018-12-01 00:00:00.000 -68.18
1 67.32 2018-11-01 00:00:00.000 0.0
3 167.34 2018-11-01 00:00:00.000 0.0
1 67.32 2018-10-01 00:00:00.000 -21.05
3 167.34 2018-10-01 00:00:00.000 -45.36
1 88.37 2018-09-01 00:00:00.000 0.0
3 212.70 2018-09-01 00:00:00.000 -51.32
1 88.37 2018-08-01 00:00:00.000 0.0
3 264.02 2018-08-01 00:00:00.000 0.0
1 88.37 2018-07-01 00:00:00.000 0.0
3 264.02 2018-07-01 00:00:00.000 0.0
В случае достижения самой старой даты price_change
должно быть просто 0.
Я попытался отсортировать и использовать pd.DataFrame.diff выглядит следующим образом:
df.sort_values(by=['part', 'date'])
df['price_change'] = df['price'].diff()
Вместе с филлной это почти работает.Проблема в том, что это не перезапускает вычисления diff каждый раз, когда достигается новая часть.