对重复 ID 使用最高值(Pandas DataFrame)

yag*_*giz 5 python pandas

我正在计算每个“id”的“价格”总和。但是当“loc_id”上有重复时,它应该使用最高价格进行计算,并忽略相同“loc_id”的较低价格。

下面的示例显示了 A-1 的 3 个副本。A-1 的最高价格是 100,所以 A 的总和应该是 100 + 200

df

id     loc_id    price
A        A-1        50
A        A-1        100
A        A-1        30
A        A-2        200

B        B-1        30      
B        B-2        50      
Run Code Online (Sandbox Code Playgroud)
df_expected_result

id      total       average
A        300        150
B        80         40
Run Code Online (Sandbox Code Playgroud)

如果没有 max() 方法,代码会运行,但它会重复计算 loc_id 重复项。我试图避免重复计算。如何让它只选择每个唯一 loc_id 的最大值?

(df.set_index(['id','loc_id'])
  .groupby(level=0)['price']
  .max()
  .agg({'total' : np.sum , 'average' : np.average })                     
  .sort_values('total',ascending=False))
Run Code Online (Sandbox Code Playgroud)

包含 max() 方法时出现错误:

ValueError: cannot perform both aggregation and transformation operations simultaneously
Run Code Online (Sandbox Code Playgroud)

ank*_*_91 4

尝试使用双groupby()

(df.groupby(['id','loc_id'],as_index=False)['price'].max()
           .groupby('id')['price'].agg(['sum','mean']))
Run Code Online (Sandbox Code Playgroud)
    sum  mean
id           
A   300   150
B    80    40
Run Code Online (Sandbox Code Playgroud)