如何正确使用DataFrame的iterrows()方法查找别墅最高价?
问题解决建议
1. 解决iterrows()调用未筛选别墅的问题
你当前的price()函数没有利用iterrows()循环中的单条行数据,大概率是直接读取了整个原始DataFrame的房价,导致结果没有过滤出别墅房型。
两种修正思路:
- 思路1:循环收集房价后求最大值
直接在循环中提取每行的别墅房价,实时更新最大值:max_price = 0 for _, row in mansion.iterrows(): current_price = row["h_price"] if current_price > max_price: max_price = current_price print(max_price) - 思路2:修改
price()函数接收参数
让函数接收单条房价数值,循环时传入当前行的房价:def price(current_price): global max_price if current_price > max_price: max_price = current_price max_price = 0 for _, row in mansion.iterrows(): price(row["h_price"]) print(max_price)
2. 解决apply()调用的参数报错问题
报错TypeError: price() takes 0 positional arguments but 1 was given的原因是:apply(axis=1)会自动把每一行数据作为参数传给price(),但你的函数没有定义接收参数的位置。
修正方法:
- 给
price()添加参数接收行数据,提取房价后再求最大值:def price(row): return row["h_price"] # 提取所有别墅房价后求最大值 mansion_prices = mansion.apply(price, axis=1) max_price = mansion_prices.max() print(max_price) - 更简洁的写法(无需单独定义
price()):max_price = mansion.apply(lambda row: row["h_price"], axis=1).max()
补充说明:
iterrows()和apply()的性能都远不如常规的df[df["h_type"] == "mansion"]["h_price"].max(),如果不是练习需求,优先使用常规方法。
内容的提问来源于stack exchange,提问作者april
相关产品推荐
相关产品推荐

