我有一个数据框,想按“公司”一列分组,汇总多列,然后为每个汇总列找到最大值的公司。
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与多个聚合一起使用 将“已执行”,“请求”,“ Num_of_refunds”和 计算为“ Request_Id”
我想要返回每个总数和计数总计最大值的公司名称
performed Requests Request_Id Num_of_refunds
max max max max
B: 103 A: 66 B: 3 B: 23
答案 0 :(得分:1)
如果数字列为sum
,则可以将GroupBy.agg
与count
一起使用;如果为字符串,则可以将{{11}}与Company
一起使用,然后将DataFrame.idxmax
的最大值作为max
并与{{ 1}}转换为string
,最后在必要时用Series.to_frame
将Series
转换为一行DataFrame
并转置:
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
答案 1 :(得分:0)
df.groupby(['Company']).agg({'performed':'sum'
, 'Requests':'sum'
, 'Num_of_refunds':'sum'
,'Request_Id':'count'})