1. ホーム
  2. python

[解決済み] データフレームをグループ化し、sumとcountを得るには?

2022-12-11 14:18:48

質問

以下のようなデータフレームがあります。

              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 をカウントして、次のような新しいデータフレームを得ることができますか?

              Company Name             Organisation Count   Amount
10118  Vifor Pharma UK Ltd                              5 11000.00

私は和の方法を知っている または を数えることができます。

df.groupby('Company Name').sum()
df.groupby('Company Name').count()

しかし、両方を行う方法はありません

どのように解決するのですか?

これを試してみてください。

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