Pandas in Python - Агрегирование столбцов Dynami c на основе другого столбца - PullRequest
0 голосов
/ 13 апреля 2020

Алгоритм запускается ежедневно и генерирует файл. Файл может содержать динамические 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)
...