Tengo un marco de datos que se parece a esto:
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
¿Cómo sumo Amount
y cuento Organisation Name
para obtener un nuevo marco de datos que se ve así?
Company Name Organisation Count Amount
10118 Vifor Pharma UK Ltd 5 11000.00
Sé sumar o contar:
df.groupby('Company Name').sum()
df.groupby('Company Name').count()
¡Pero no cómo hacer ambas cosas!
df['count'] = 1
df.groupby(df['L2 Name'])[["Amount arrear","VSU"]].agg(['sum','count'])
En caso de que se pregunte cómo cambiar el nombre de las columnas durante la agregación, aquí se explica cómo
pandas> = 0.25: Agregación con nombre
df.groupby('Company Name')['Amount'].agg(MySum='sum', MyCount='count')
O,
df.groupby('Company Name').agg(MySum=('Amount', 'sum'), MyCount=('Amount', 'count'))
MySum MyCount Company Name Vifor Pharma UK Ltd 4207.93 5
fuente
Si tiene muchas columnas y solo una es diferente, puede hacer:
In[1]: grouper = df.groupby('Company Name') In[2]: res = grouper.count() In[3]: res['Amount'] = grouper.Amount.sum() In[4]: res Out[4]: Organisation Name Amount Company Name Vifor Pharma UK Ltd 5 4207.93
Tenga en cuenta que puede cambiar el nombre de la columna Nombre de la organización como desee.
fuente
df.groupby('Company Name').agg({'Organisation name':'count','Amount':'sum'})\ .apply(lambda x: x.sort_values(['count','sum'], ascending=False))
fuente