Код: Выделить всё
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
Например, для идентификатора 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