Групповой фрейм и получить сумму И счет?

У меня есть 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

Обратите внимание, что вы можете переименовать столбец "Название организации", как хотите.