如何对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)
代码说明
- 筛选组内最高price的行:使用
transform方法获取每组的最大price,生成和原DataFrame长度一致的序列,直接用于筛选出所有组内price达标的行。 - 提取对应最大horse-power:对筛选后的行再次分组,同一组内price已经是最大值,直接取
horse-power的最大值即可,price取任意一个(这里用first)都不会影响结果。 - 调整行顺序:通过
reindex实现自定义排序,匹配期望输出的company顺序。
运行代码后输出的结果与期望完全一致。
内容的提问来源于stack exchange,提问作者serlomu
相关产品推荐
相关产品推荐

