Как создать новый столбец по результатам группировки и суммирования других столбцов?
Дан df:
a = pd.DataFrame([{'id': 1, 'b': 2, 'c': 2},
{'id': 1, 'b': 2, 'c': 2},
{'id': 1, 'b': 4, 'c': 2},
{'id': 1, 'b': 5, 'c': 2},
{'id': 1, 'b': 2, 'c': 2},
{'id': 2, 'b': 3, 'c': 2},
{'id': 2, 'b': 2, 'c': 2},
{'id': 2, 'b': 2, 'c': 2},
{'id': 3, 'b': 2, 'c': 2},
{'id': 3, 'b': 2, 'c': 2},
{'id': 3, 'b': 5, 'c': 2},
{'id': 3, 'b': 2, 'c': 1}])
Как можно сгруппировать строки по значению id и по значению b, например равного 2, просуммировав значения из столбца c, занести их в колонку d? То есть, должно получиться так:
pd.DataFrame([{'id': 1, 'b': 2, 'c': 2, 'd': 6},
{'id': 1, 'b': 2, 'c': 2, 'd': 6},
{'id': 1, 'b': 4, 'c': 2, 'd': 6},
{'id': 1, 'b': 5, 'c': 2, 'd': 6},
{'id': 1, 'b': 2, 'c': 2, 'd': 6},
{'id': 2, 'b': 3, 'c': 2, 'd': 4},
{'id': 2, 'b': 2, 'c': 2, 'd': 4},
{'id': 2, 'b': 2, 'c': 2, 'd': 4},
{'id': 3, 'b': 2, 'c': 2, 'd': 5},
{'id': 3, 'b': 2, 'c': 2, 'd': 5},
{'id': 3, 'b': 5, 'c': 2, 'd': 5},
{'id': 3, 'b': 2, 'c': 2, 'd': 5}])
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
a["d"] = a["id"].map(a.query("b == 2").groupby("id")["c"].sum())
результат:
In [268]: a
Out[268]:
id b c d
0 1 2 2 6
1 1 2 2 6
2 1 4 2 6
3 1 5 2 6
4 1 2 2 6
5 2 3 2 4
6 2 2 2 4
7 2 2 2 4
8 3 2 2 5
9 3 2 2 5
10 3 5 2 5
11 3 2 1 5