获取pandas groupby obj中多个列的最大聚合数

2024-09-22 16:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,想按一列“Company”分组,聚合多个列,然后找到每个聚合列的最大值的公司。在

  Company   performed    Requests     Request_Id  Num_of_refunds
0  A         7             60          U9             3
1  A         90            6           U10            2
2  B         89            6           ZX9            10
3  B         2             3           OOF            9         
4  B         22            0           LQI            4 
5  D         7             5           QW             3
6  D         87            2           XB             5

我想使用一个groupby和多个聚合 “已执行”、“请求”、“退款数量”和 计数“请求_Id”

我想要公司名称,以及返回的每个sum和count聚合的最大值

^{pr2}$

Tags: ofiddataframerequest公司requestsnumcompany
2条回答
df.groupby(['Company']).agg({'performed':'sum'
    , 'Requests':'sum'
    , 'Num_of_refunds':'sum'
    ,'Request_Id':'count'})

您可以将^{}sumif数字列和countif字符串一起使用,然后通过^{}最大值获得{},并与转换为string的{}合并,如有必要,最后将{}转换为一行DataFrame,使用{a3}并转置:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else x.count()
df1 = df.groupby('Company').agg(f)
print (df1)
         performed  Requests  Request_Id  Num_of_refunds
Company                                                 
A               97        66           2               5
B              113         9           3              23
D               94         7           2               8

df2 = (df1.idxmax() + ': ' + df1.max().astype(str)).to_frame().T
print (df2)
  performed Requests Request_Id Num_of_refunds
0    B: 113    A: 66       B: 3          B: 23

相关问题 更多 >