Как создать новый столбец по результатам группировки и суммирования других столбцов?

Дан 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
→ Ссылка