如何用Pandas按分组+数值范围筛选,求指定列最小值?
解决Pandas筛选分组求最小值的问题
你之前的代码逻辑偏离了需求——你试图用pd.cut按B列的区间分组,但实际需求是先筛选B列处于0.2-0.5范围的数据,再按A列分组计算C列最小值,这才是导致AssertionError的核心原因。
正确实现步骤
- 筛选数据:先过滤出B列值在
[0.2, 0.5]范围内的行(包含边界,匹配期望输出的逻辑) - 分组聚合:按A列分组,计算每个分组下C列的最小值
- 格式整理:将结果转换为期望的DataFrame结构
完整代码
import pandas as pd # 给定的DataFrame df = pd.DataFrame({ 'A': ['a','b','a','b','a','b','a','b'], 'B': [0.1,0.2,0.3,0.4,0.5,0.46,0.76,.9], 'C': [10,20,40,54,67,35,90,33] }) # 1. 筛选B列在0.2到0.5之间的数据(包含边界) filtered_df = df[(df['B'] >= 0.2) & (df['B'] <= 0.5)] # 2. 按A分组,计算C的最小值 result = filtered_df.groupby('A')['C'].min().reset_index() # 3. 重命名列名以匹配期望输出 result.columns = ['A', 'Min'] print(result)
输出结果
A Min 0 a 40 1 b 20
补充说明
- 筛选条件
(df['B'] >= 0.2) & (df['B'] <= 0.5)确保保留所有符合范围的行,和期望输出逻辑一致 groupby('A')['C'].min()仅针对C列计算最小值,避免多余列干扰reset_index()将分组后的索引转换为普通列,方便整理成目标格式
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

