/ / pandas groupby ocorrência de sequência de contagem sobre coluna - python, pandas, count, group-by, dataframe

pandas groupby contagem de ocorrência de string sobre coluna - python, pandas, count, group-by, dataframe

Eu quero contar a ocorrência de uma string em uma coluna dataframe de pandas agrupados.

Suponha que eu tenha o seguinte Dataframe:

catA    catB    scores
A       X       6-4 RET
A       X       6-4 6-4
A       Y       6-3 RET
B       Z       6-0 RET
B       Z       6-1 RET

Primeiro, quero agrupar por catA e catB. E para cada um desses grupos eu quero contar a ocorrência de RET no scores coluna.

O resultado deve ser algo como isto:

catA    catB    RET
A       X       1
A       Y       1
B       Z       2

O agrupamento por duas colunas é fácil: grouped = df.groupby(["catA", "catB"])

Mas o que vem depois?

Respostas:

10 para resposta № 1

Ligar apply na coluna "pontuações" no groupby objeto e usar o vectorise str método contains, use isso para filtrar group e ligue count:

In [34]:
df.groupby(["catA", "catB"])["scores"].apply(lambda x: x[x.str.contains("RET")].count())

Out[34]:
catA  catB
A     X       1
Y       1
B     Z       2
Name: scores, dtype: int64

Para atribuir como coluna use transform para que a agregação retorne uma série com o índice alinhado ao df original:

In [35]:
df["count"] = df.groupby(["catA", "catB"])["scores"].transform(lambda x: x[x.str.contains("RET")].count())
df

Out[35]:
catA catB   scores count
0    A    X  6-4 RET     1
1    A    X  6-4 6-4     1
2    A    Y  6-3 RET     1
3    B    Z  6-0 RET     2
4    B    Z  6-1 RET     2