次のようなデータフレームがあります。
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
私は合計する方法を知っていますor count:
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
多くの列があり、1つだけが異なる場合は、次のようにできます。
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
その後、必要に応じて[組織名]列の名前を変更できることに注意してください。