/ / Crie duas colunas agregadas por Grupo por Pandas - python, pandas, dataframe, grupo por, funções agregadas

Crie duas colunas agregadas por Group By Pandas - python, pandas, dataframe, group-by, funções-agregadas

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 № 1

Você pode usar aggregateou 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

Documentação do Pandas.

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