You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataFrame按公司分组,提取price及horse-power的最大值?

按规则分组处理DataFrame:提取组内最高price对应的最大horse-power

需求说明

针对DataFrame按company分组,先提取每组中price的最大值,再在该price对应的组内记录中,提取horse-power的最大值,最终得到指定格式的结果。

输入示例

company     price   horse-power 
  toyota     20000     100
  toyota     20000     125
  bmw        40000     150
  volkswagen 33000     130  
  bmw        45000     200 
  toyota     20000     120
  audi       30000     150
  volkswagen 32000     110
  audi       35000     180
  volkswagen 33000     135

期望输出

company     price   horse-power 
  volkswagen 33000     135  
  bmw        45000     200 
  toyota     20000     125
  audi       35000     180

解决方案(Pandas实现)

import pandas as pd

# 构造输入DataFrame
data = {
    'company': ['toyota', 'toyota', 'bmw', 'volkswagen', 'bmw', 'toyota', 'audi', 'volkswagen', 'audi', 'volkswagen'],
    'price': [20000, 20000, 40000, 33000, 45000, 20000, 30000, 32000, 35000, 33000],
    'horse-power': [100, 125, 150, 130, 200, 120, 150, 110, 180, 135]
}
df = pd.DataFrame(data)

# 1. 筛选出每组中price等于组内最大值的所有行
max_price = df.groupby('company')['price'].transform('max')
filtered_rows = df[df['price'] == max_price]

# 2. 对筛选后的行按company分组,提取horse-power的最大值,保留price(组内统一为最大值)
result = filtered_rows.groupby('company').agg(
    price=('price', 'first'),
    horse_power=('horse-power', 'max')
).reset_index().rename(columns={'horse_power': 'horse-power'})

# 3. 调整行顺序以匹配期望输出
result = result.set_index('company').reindex(['volkswagen', 'bmw', 'toyota', 'audi']).reset_index()

print(result)

代码说明

  1. 筛选组内最高price的行:使用transform方法获取每组的最大price,生成和原DataFrame长度一致的序列,直接用于筛选出所有组内price达标的行。
  2. 提取对应最大horse-power:对筛选后的行再次分组,同一组内price已经是最大值,直接取horse-power的最大值即可,price取任意一个(这里用first)都不会影响结果。
  3. 调整行顺序:通过reindex实现自定义排序,匹配期望输出的company顺序。

运行代码后输出的结果与期望完全一致。

内容的提问来源于stack exchange,提问作者serlomu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:46:23