У меня есть фрейм данных, такой как:
df = pd.DataFrame([
{'id': 1, 'bonus': True, 'value': 10 },
{'id': 1, 'bonus': True, 'value': 15 },
{'id': 1, 'bonus': False, 'value': 5 },
{'id': 2, 'bonus': False, 'value': 20 },
{'id': 2, 'bonus': True, 'value': 10 },
])
Я хочу добавить дополнительное значение «bonus_value» к каждому идентификатору, содержащее сумму всех связанных бонусов, если текущая строка не является бонусом.Что-то вроде:
{'id': 1, 'bonus': True, value: 10, bonus_value: 0 },
{'id': 1, 'bonus': True, value: 15, bonus_value: 0 },
{'id': 1, 'bonus': False, value: 5, bonus_value: 25 },
{'id': 2, 'bonus': False, value: 20, bonus_value: 10 },
{'id': 2, 'bonus': True, value: 10, bonus_value: 0 },
Бонус не может быть привязан к бонусу.И я просто хочу получить сумму всех связанных с этим бонусов в свойстве bonus_value
.
Я попытался сгруппировать их:
per_id_groups = df.groupby(["id", "bonus"]).sum().reset_index()
updated_df = df.merge(
per_id_groups,
on=["id", "bonus"],
suffixes=["", "_with_bonus"]
)
updated_df["bonus_value"] = updated_df["value_with_bonus"] - updated_df["value"]
Но, очевидно, это не работает:
bonus id value value_with_bonus bonus_value
0 True 1 10 25 15
1 True 1 15 25 10
2 False 1 5 5 0
3 False 2 20 20 0
4 True 2 10 10 0
Действительно, у меня не должно быть никакого значения в столбце bonus_value
, когда это бонус.И, что еще раздражает, у меня нет суммы в bonus=False
строках.
Я не могу найти способ решить эту проблему.Я полагаю, мне следует пропустить функцию Панд здесь?:)