Алгоритм запускается ежедневно и генерирует файл. Файл может содержать динамические c столбцы в каждом прогоне.
- Первый запуск: страна, дата, exchange_rate, sale_amt, profit_amt, 1st_purch, 2nd_purch
- Второй запуск: страна, дата , exchange_rate, sale_amt, profit_amt, 1st_purch, 2nd_purch, 3rd_purch
- Третий запуск: страна, дата, exchange_rate, sale_amt, profit_amt, 1st_purch, 2nd_purch, 3rd_purch, margin_amt
Только ' Столбцы amt 'должны быть разделены на exchange_rate и agregated (sum). Оставшиеся столбцы можно агрегировать (суммировать) как есть.
Вход :
country date sale_amt profit_amt 1st_purch 2nd_purch exchange_rate
US 2019-12-01 100 10 11 21 2
US 2019-12-02 200 20 12 22 2
US 2019-12-03 300 30 13 23 2
US 2019-12-04 400 40 14 34 2
US 2019-12-05 500 50 15 25 2
Выход :
country sale_amt profit_amt 1st_purch 2nd_purch
US 750 75 65 125
Logic:
sale_amt=sum(sale_amt/exchange_rate)
profit_amt=sum(profit_amt/exchange_rate)
1st_purch=sum(1st_purch)
2nd_purch=sum(2nd_purch)
Я написал фрагмент кода ниже, но не смог сгенерировать правильное выражение для включения деления на exchange_rate для столбцов валюты.
columns = df.columns
groupbyColumns = ["country"]
columnNotRequiredAgg=["date","exchange_rate,"] #
aggCols = list(set(columns) - set(columnNotRequiredAgg))
expr = {x:'sum' if 'amt' in x else 'sum' for x in aggCols } <<-- how to write correct logic
df.groupby(groupbyColumns).agg(expr)