Как добавить новый новый столбец в 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 в таком случае тоже добавлялась разница между вчерашним и сегодняшним днём.