Tenho um Polars DataFrame onde cada id pode aparecer várias vezes com valores de estado diferentes (1 ou 2). Quero contar quantos ids exclusivos têm apenas o estado 1, apenas o estado 2 ou ambos os estados 1 e 2.
import polars as pl
df = pl.DataFrame({
"id": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 20, 20, 20],
"state": [1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2]
})
Quero contar quantos IDs exclusivos se enquadram em cada categoria:
• Apenas indique 1 (por exemplo, IDs que têm apenas 1)
• Apenas indique 2 (por exemplo, IDs que tenham apenas 2)
• Ambos os estados 1 e 2 (por exemplo, IDs que têm 1 e 2)
Resultado esperado (exemplo):
State combination [1] -> 20 IDs
State combination [2] -> 15 IDs
State combination [1, 2] -> 30 IDs
Você precisa de dois
group_by
s, o primeiro para combinar osid
s nos estados e depois outrogroup_by
para os estados para contar o número deid
sVocê pode agrupar por
id
e usar.all()
e.any()
para verificar os estados.As
.sum()
colunas bool são as contagens.Para referência futura, forneça qual deve ser a saída correta em vez de apenas um exemplo de saída.
Você pode executar um grupo, pegar os estados exclusivos para cada ID e, em seguida, pegar as contagens de valor disso