У меня есть следующий фрейм данных в пандах
code tank nozzle_1 nozzle_2 nozzle_var nozzle_sale
123 1 1 1 10 10
123 1 2 2 12 10
123 2 1 1 10 10
123 2 2 2 12 10
123 1 1 1 10 10
123 2 2 2 12 10
Теперь я хочу сгенерировать кумулятивную сумму всех столбцов, группирующихся по резервуару, и убрать последнее наблюдение.Столбцы nozzle_1 и nozzle_2 являются динамическими, это могут быть nozzle_3, nozzle_4 .... nozzle_n и т. д. Я выполняю следующие действия в пандах, чтобы получить сумму
## Below code for calculating cumsum of dynamic columns nozzle_1 and nozzle_2
cols= df.columns[df.columns.str.contains(pat='nozzle_\d+$', regex=True)]
df.assign(**df.groupby('tank')[cols].agg(['cumsum'])\
.pipe(lambda x: x.set_axis(x.columns.map('_'.join), axis=1, inplace=False)))
## nozzle_sale_cumsum is static column
df[nozzle_sale_cumsum] = df.groupby('tank')['nozzle_sale'].cumsum()
Приведенный выше код получит сумму следующих столбцов
tank nozzle_1 nozzle_2 nozzle_var nozzle_1_cumsum nozzle_2_cumsum nozzle_sale_cumsum
1 1 1 10 1 1 10
1 2 2 12 3 3 20
2 1 1 10 1 1 10
2 2 2 12 3 3 20
1 1 1 10 4 4 30
2 2 2 12 5 5 30
Теперь я хочу получить последние значения всех 3 столбцов сгруппированных по резервуару.Я могу сделать это с помощью следующего кода в пандах, но он жестко запрограммирован с именами столбцов.
final_df= df.groupby('tank').agg({'nozzle_1_cumsum':'last',
'nozzle_2_cumsum':'last',
'nozzle_sale_cumsum':'last',
}).reset_index()
Проблема с приведенным выше кодом - nozzle_1_cumsum, а nozzle_2_cumsum - жестко запрограммированный, что не так.Как я могу сделать это в пандах с динамическими колоннами.