如何用Python Pandas计算符合指定条件的车型平均价格并返回元组?
解决方法
你的初始代码存在几个明显问题:
- 未先筛选符合条件的数据,直接分组会包含大量无关行
- groupby的列参数错误,不存在
criteria列,且你实际需要按品牌分组计算均值 mean是方法需加括号调用mean(),而非直接引用方法对象- 函数内代码缺少缩进(违反Python语法要求)
以下是修正后的完整实现:
import pandas as pd df = pd.read_csv("vehicles.csv") def get_avg_prices(): # 1. 筛选符合条件的行:品牌为Honda/Toyota、车况good、车型sedan filtered_data = df[ (df['manufacturer'].isin(['Honda', 'Toyota'])) & (df['condition'] == 'good') & (df['type'] == 'sedan') ] # 2. 按品牌分组,计算对应平均价格 brand_avg_prices = filtered_data.groupby('manufacturer')['price'].mean() # 3. 按指定品牌顺序转换为元组(确保Honda在前、Toyota在后) # 若无需固定顺序,直接用tuple(brand_avg_prices.values)即可 return (brand_avg_prices['Honda'], brand_avg_prices['Toyota'])
关键步骤说明:
- 数据筛选:用布尔索引组合三个条件,
isin()用于匹配多个品牌值,&表示逻辑与(注意括号不能省略,避免运算符优先级错误) - 分组计算:仅按
manufacturer分组,提取price列后调用mean()得到均值,结果是一个Series,索引为品牌名,值为对应平均价格 - 转换元组:如果需要固定顺序的结果,直接通过索引取值;若不关心顺序,
tuple(brand_avg_prices.values)也能得到符合要求的元组
简化写法提示:
可以用query()方法简化筛选代码,可读性更强:
filtered_data = df.query("manufacturer in ['Honda', 'Toyota'] and condition == 'good' and type == 'sedan'")
内容的提问来源于stack exchange,提问作者Mike Zhao
相关产品推荐
相关产品推荐

