如何在Python的DataFrame中筛选mansion组并获取其最高房价?
解决Pandas筛选特定分组并查找最高价格的问题
原代码问题分析
你写的if df.loc[df['h_type']=='mansion']无法运行,因为布尔索引返回的是DataFrame对象,Python无法直接将其转换为布尔值用于条件判断,会触发ValueError。此外代码中priceSr未定义,逻辑上也没有先隔离出'mansion'分组的数据,容易误包含其他类型(比如'apartment')的记录。
正确实现步骤
- 先筛选出
h_type为'mansion'的子数据集,完全隔离其他类型数据 - 判断该子数据集是否非空(避免无匹配数据的情况)
- 在子数据集中查找
h_price最高的记录
完整代码示例
首先定义正确的示例DataFrame:
import pandas as pd # 示例数据,注意字符串要加引号 df = pd.DataFrame({ 'h_type': ['apartment', 'mansion', 'apartment', 'mansion', 'mansion'], 'h_price': [500000, 1200000, 600000, 1500000, 1300000] })
方法一:用nlargest直接获取最高价格行(推荐)
nlargest可以直接返回指定列排序后的前N行,代码更简洁,还能处理多个相同最高价格的情况:
amost = None # 筛选mansion分组数据 mansion_group = df[df['h_type'] == 'mansion'] if not mansion_group.empty: # 获取h_price最高的一行 amost = mansion_group.nlargest(1, 'h_price') else: print("未找到mansion类型的数据") if amost is not None: print(amost, '\n==========')
方法二:用idxmax获取索引再取行
如果要沿用你原代码的思路,修正后的代码如下:
import numpy as np amost = None mansion_group = df[df['h_type'] == 'mansion'] if not mansion_group.empty: # 获取mansion分组中h_price最高的索引 max_price_idx = mansion_group['h_price'].idxmax() # 取出对应行并转置为DataFrame格式 amost = mansion_group.loc[max_price_idx].to_frame().transpose() if amost is not None: print(amost, '\n==========')
运行结果
上述代码会输出mansion分组中价格最高的记录,比如示例数据中会返回:
h_type h_price 3 mansion 1500000 ==========
内容的提问来源于stack exchange,提问作者april
相关产品推荐
相关产品推荐

