Групповой фрейм и получить сумму И счет?
У меня есть dataframe, который выглядит так:
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
Как просуммировать Amount
и подсчитывают Organisation Name
, чтобы получить новый dataframe, который выглядит, как это?
Company Name Organisation Count Amount
10118 Vifor Pharma UK Ltd 5 11000.00
Я знаю, как суммироваться:
df.groupby('Company Name').sum()
df.groupby('Company Name').count()
Но не так, как это сделать!
Ответы
Ответ 1
попробуй это:
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
или если вы не хотите сбросить индекс:
df.groupby('Company Name')['Amount'].agg(['sum','count'])
или
df.groupby('Company Name').agg({'Amount': ['sum','count']})
Демо-версия:
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
Ответ 2
Если у вас много столбцов, и только одно - другое, вы можете сделать:
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
Обратите внимание, что вы можете переименовать столбец "Название организации", как хотите.