pandas 对数组进行分组并得到求和和计数

kfgdxczn  于 2023-11-15  发布在  其他
关注(0)|答案(4)|浏览(115)

我有一个类似这样的框架:

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()


但不知道如何做到这两点!

xa9qqrwz

xa9qqrwz1#

试试这个:

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

4smxwvx5

4smxwvx52#

如果您想知道如何在聚合期间重命名列,

pandas >= 0.25:命名聚合

df.groupby('Company Name')['Amount'].agg(MySum='sum', MyCount='count')

字符串
或者,

df.groupby('Company Name').agg(MySum=('Amount', 'sum'), MyCount=('Amount', 'count'))

MySum  MyCount
Company Name                       
Vifor Pharma UK Ltd  4207.93        5

8oomwypt

8oomwypt3#

如果你有很多列,只有一个是不同的,你可以这样做:

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

字符串

  • 请注意,您可以根据需要重命名组织名称列。*
xxhby3vn

xxhby3vn4#

df.groupby('Company Name').agg({'Organisation name':'count','Amount':'sum'})\
    .apply(lambda x: x.sort_values(['count','sum'], ascending=False))

字符串

相关问题