J'ai un dataframe qui ressemble à ceci:
Company Name Organisation Name Amount
10118 Vifor Pharma UK Ltd Welsh Assoc for Gastro & Endo 2700.00
10119 Vifor Pharma UK Ltd Welsh IBD Specialist Group, 169.00
10120 Vifor Pharma UK Ltd West Midlands AHSN 1200.00
10121 Vifor Pharma UK Ltd Whittington Hospital 63.00
10122 Vifor Pharma UK Ltd Ysbyty Gwynedd 75.93
Comment résumer la Amount
et compter le Organisation Name
afin d'obtenir un nouveau cadre de données ressemblant à ceci?
Company Name Organisation Count Amount
10118 Vifor Pharma UK Ltd 5 11000.00
Je sais comment résumer o compter:
df.groupby('Company Name').sum()
df.groupby('Company Name').count()
Mais pas comment faire les deux!
essaye ça:
In [110]: (df.groupby('Company Name')
.....: .agg({'Organisation Name':'count', 'Amount': 'sum'})
.....: .reset_index()
.....: .rename(columns={'Organisation Name':'Organisation Count'})
.....: )
Out[110]:
Company Name Amount Organisation Count
0 Vifor Pharma UK Ltd 4207.93 5
ou si vous ne voulez pas réinitialiser l'index:
df.groupby('Company Name')['Amount'].agg(['sum','count'])
ou
df.groupby('Company Name').agg({'Amount': ['sum','count']})
Démo:
In [98]: df.groupby('Company Name')['Amount'].agg(['sum','count'])
Out[98]:
sum count
Company Name
Vifor Pharma UK Ltd 4207.93 5
In [99]: df.groupby('Company Name').agg({'Amount': ['sum','count']})
Out[99]:
Amount
sum count
Company Name
Vifor Pharma UK Ltd 4207.93 5
Si vous avez beaucoup de colonnes et qu'une seule est différente, vous pouvez le faire:
In[1]: grouper = df.groupby('Company Name')
In[2]: res = grouper.count()
In[3]: res['Amount'] = grouper.sum()['Amount']
In[4]: res
Out[4]:
Organisation Name Amount
Company Name
Vifor Pharma UK Ltd 5 4207.93
Notez que vous pouvez alors renommer la colonne Nom de l'organisation à votre guise.