web-dev-qa-db-fra.com

Pandas Groupby: nombre et moyenne combinés

Travailler avec PANDAS pour essayer de résumer une trame de données en comptant certaines catégories, ainsi que le score moyen des sentiments pour ces catégories.

Il y a un tableau plein de chaînes qui ont des scores de sentiment différents, et je veux regrouper chaque source de texte en disant combien de messages ils ont, ainsi que le sentiment moyen de ces messages.

Ma trame de données (simplifiée) ressemble à ceci:

source    text              sent
--------------------------------
bar       some string       0.13
foo       alt string        -0.8
bar       another str       0.7
foo       some text         -0.2
foo       more text         -0.5

La sortie de ceci devrait ressembler à ceci:

source    count     mean_sent
-----------------------------
foo       3         -0.5
bar       2         0.415

La réponse se situe quelque part dans le sens de:

df['sent'].groupby(df['source']).mean()

Pourtant, ne donne que chaque source et c'est moyen, sans en-têtes de colonne.

Merci d'avance!

14
Lewis Anderson

Vous pouvez utiliser groupby avec aggregate :

df = df.groupby('source') \
       .agg({'text':'size', 'sent':'mean'}) \
       .rename(columns={'text':'count','sent':'mean_sent'}) \
       .reset_index()
print (df)
  source  count  mean_sent
0    bar      2      0.415
1    foo      3     -0.500
17
jezrael