Python Pandas: обновление значений параметров последних дат с помощью простой динамики, сгруппированной по идентификаторPython

Программы на Python
Anonymous
Python Pandas: обновление значений параметров последних дат с помощью простой динамики, сгруппированной по идентификатор

Сообщение Anonymous »

Вот кадр данных с некоторыми параметрами для каждого идентификатора по некоторым регулярным квартальным датам. Изначально оно перемешивается случайным образом, но сначала, скажем, сортируется по fab_date и id.

Код: Выделить всё

import pandas as pd
np.random.seed(1)
dt_to_fun = pd.DataFrame({
'fab_date': pd.to_datetime(["2022-01-01", "2022-07-01", "2023-01-01", "2023-07-01",
"2022-01-01", "2022-07-01", "2023-01-01", "2023-07-01",
"2022-01-01", "2022-07-01", "2023-01-01", "2023-07-01"]),
'id': ['n_01', 'n_01', 'n_01', 'n_01', 'n_02', 'n_02', 'n_02', 'n_02', 'n_03', 'n_03', 'n_03', 'n_03'],
'param_01': np.random.choice([10, 20, 30], size=12),
'param_02': np.random.choice([10, 30, 50], size=12)
})

dt_to_fun
fab_date    id  param_01    param_02
0   2022-01-01  n_01    20  30
1   2022-07-01  n_01    10  50
2   2023-01-01  n_01    10  10
3   2023-07-01  n_01    20  50
4   2022-01-01  n_02    20  30
5   2022-07-01  n_02    10  50
6   2023-01-01  n_02    10  10
7   2023-07-01  n_02    20  10
8   2022-01-01  n_03    10  50
9   2022-07-01  n_03    20  10
10  2023-01-01  n_03    10  30
11  2023-07-01  n_03    30  50
Цель: для каждого идентификатора заменить значение параметра (последняя дата) следующим образом: param_01(последняя дата) = param_01(последняя дата) + param_01(-1 дата) - param_01(- 2 date)
Например, для идентификатора n_03 последнее значение параметра_02 равно 50, предыдущее значение равно 30, два раза ранее равно 10, поэтому результат должен быть 50 + 30 - 10 = 70. То же самое для каждого идентификатора и всех параметров. * столбцы. Должны обновляться только параметры в строках с последней датой для каждого идентификатора.
Результирующая таблица должна быть такой:

Код: Выделить всё

dt_to_fun
fab_date    id  param_01    param_02
0   2022-01-01  n_01    20  30
1   2022-07-01  n_01    10  50
2   2023-01-01  n_01    10  10
3   2023-07-01  n_01    20  10
4   2022-01-01  n_02    20  30
5   2022-07-01  n_02    10  50
6   2023-01-01  n_02    10  10
7   2023-07-01  n_02    20  -30
8   2022-01-01  n_03    10  50
9   2022-07-01  n_03    20  10
10  2023-01-01  n_03    10  30
11  2023-07-01  n_03    20  70
Я пробовал применить карту, сдвиг и т. д., но не могу понять, как все это должно работать вместе. Буду признателен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/787 ... mics-group

Вернуться в «Python»