Как добавить новый новый столбец в data frame, основанный на значении в другом столбце

Я хочу посчитать разницу в конверсиях (столбец Appr) между вчерашним и сегодняшним днем по каждому офферу + аффилиату, и добавить разницу в столбец DiffAppr.

Исходный фрейм данных выглядит так:

| D  | H  | AfID | Affil_name | M     | OfID | Offer_name  | Clicks | Revenue | Earnings | Appr | Decl | CR    | Tr-back |
|----|----|------|------------|-------|------|-------------|--------|---------|----------|------|------|-------|---------|
| 28 | 11 | 340  | alex       |  T    | 2132 | FlashPlaye  | 10000  | 0       | 0        | 100  | 0    | 1:100 | 0       |
| 28 | 11 | 528  | ido        | Marti | 2587 | Amazon_S    | 20400  | 0       | 0        | 68   | 0    | 1:300 | 0       |
| 29 | 11 | 340  | alex       |  T    | 2132 | FlashPlayer | 2800   | 3       | 0,6      | 200  | 0    | 1:14  | 0       |

Я применяю функцию:

df['DifAppr'] = (df.groupby(['H', 'AfID', 'Affil_name', 'M', 'OfID','Offer_name'])['Appr']
             .apply(lambda x: x.diff() if len(x) >= 2 else x).fillna(0))

На выходе получаю:

|  D |  H | AfID | Affil_name |   M   | OfID | Offer_name | Clicks | Revenue | Earnings | Appr | Decl |   CR  | Tr-back | Diff |
|:--:|:--:|:----:|:----------:|:-----:|:----:|:----------:|:------:|:-------:|:--------:|:----:|:----:|:-----:|:-------:|:----:|
| 28 | 11 | 340  | alex       |  T    | 2132 | FlashPlaye | 10000  | 0       | 0        | 100  | 0    | 1:100 | 0       | 0    |
| 28 | 11 | 528  | ido        | Marti | 2587 | Amazon_S   | 20400  | 0       | 0        | 68   | 0    | 1:300 | 0       | 68   |
| 29 | 11 | 340  | alex       |  T    | 2132 | FlashPlaye | 10000  | 0       | 0        | 200  | 0    | 1:100 | 0       | 100  |

Мне нужно чтобы результат зависел от столбца D. То еть если столбец D == 28 то в столбец DiffAppr было отрицательное число, т.е. добавитьelse(x*(-1) if x['D']== 28 else x. Я пытаюсь сделать таким образом, но выдаёт ошибку: KeyError: 'D'. Или возможно есть другое способ вернуть значение столбца Appr в DiffAppr и сделать его положительным или отрицательным в зависимости от дня в столбце D.

Если абстрагироваться от этой конкретной проблемы, то у меня есть данные по офферу+аффилиату+ кликам+конверсиям и т д. за сегодняшний и вчерашний день. Я хочу получить в итоговой таблице разницу между конверсиями между вчерашним и сегодняшним днём в столбце DiffAppr. Если я использую для датафрейма groupby()+diff(), то отбрасываются те элементы, в которых есть данные за один день(т.е. для одной строки внутри группы diff()) неприменим. Я пытаюсь сделать так, чтобы эти строки оставались, а в столбец DiffAppr в таком случае тоже добавлялась разница между вчерашним и сегодняшним днём.


Ответы (0 шт):