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