基于2个分类列和1个python值聚合数据帧

问题描述 投票:1回答:1

以下示例:

Offer Client amount

'Off1' 'C1'  1000
'Off1' 'C1'  10
'Off1' 'C2'  2222
'Off1' 'C3'  0
'Off1' 'C3'  10
'Off2' 'C4'  11
'Off2' 'C1'  2342
'Off3' 'C3'  2131
'Off3' 'C100' 121
'Off3' 'C1'   1231
'Off3' 'C1'   31

我想根据每个要约和客户汇总数据,以获得最大金额。

结果将是:

Offer Client amount 

'Off1' 'C1'  1000
'Off1' 'C2'  2222
'Off1' 'C3'  10
'Off2' 'C4'  11
'Off2' 'C1'  2342
'Off3' 'C3'  2131
'Off3' 'C100' 121
'Off3' 'C1'   1231
  • 在每个报价中,候选人可以有几笔钱,因此目标是保持每个报价中每个候选人的最大价值。
  • 在这种情况下,我们希望保留每位候选人的最低和最高报价。
python pandas group-by
1个回答
1
投票

看来你需要使用max汇总agg和多个函数:

df1 = df.groupby(['Offer', 'Client'], as_index=False)['amount'].max()
print (df1)
    Offer  Client  amount
0  'Off1'    'C1'    1000
1  'Off1'    'C2'    2222
2  'Off1'    'C3'      10
3  'Off2'    'C1'    2342
4  'Off2'    'C4'      11
5  'Off3'    'C1'    1231
6  'Off3'  'C100'     121
7  'Off3'    'C3'    2131

df2 = (df.groupby(['Offer', 'Client'])['amount']
         .agg(['min','max'])
         .add_prefix('amount_')
         .reset_index())
print (df2)
    Offer  Client  amount_min  amount_max
0  'Off1'    'C1'          10        1000
1  'Off1'    'C2'        2222        2222
2  'Off1'    'C3'           0          10
3  'Off2'    'C1'        2342        2342
4  'Off2'    'C4'          11          11
5  'Off3'    'C1'          31        1231
6  'Off3'  'C100'         121         121
7  'Off3'    'C3'        2131        2131
© www.soinside.com 2019 - 2024. All rights reserved.