Sou novo no DataFrames e quero agrupar várias colunas, somar e manter uma contagem na última coluna.
s = pd.DataFrame(np.matrix([[1, 2,3,4], [3, 4,7,6],[3,4,5,6],[1,2,3,7]]), columns=["a", "b", "c", "d"])
a b c d
0 1 2 3 4
1 3 4 7 6
2 3 4 5 6
3 1 2 3 7
Eu quero agrupar a
, b
e c
mas depois soma d
e conte os elementos dentro do grupo. Eu posso contar por
s = s.groupby(by=["a", "b", "c"])["d"].count()
a b c
1 2 3 2
3 4 5 1
7 1
E eu posso somar
s = s.groupby(by=["a", "b", "c"])["d"].sum()
a b c
1 2 3 11
3 4 5 6
7 6
No entanto, quero combiná-lo de modo que O quadro de dados resultante tenha as colunas soma e contagem.
a b c sum count
1 2 3 11 2
3 4 5 6 1
7 6 1
Respostas:
1 para resposta № 1Você pode usar aggregate
ou versão mais curta agg
:
print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, "count"]))
#print (s.groupby(by=["a", "b", "c"])["d"].aggregate([sum, "count"]))
sum count
a b c
1 2 3 11 2
3 4 5 6 1
7 6 1
A diferença entre size
e count
é:
size
conta NaN
valores, count
não.
Se precisar contar NaN
valores também:
print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, "size"]))
sum size
a b c
1 2 3 11 2
3 4 5 6 1
7 6 1