如何筛选MultiIndex首层级组内列值在最小值25范围内的DataFrame行
解决方法
可以借助groupby结合transform方法实现需求,步骤如下:
- 按MultiIndex的首个层级(level=0)分组,计算每个分组中
v列的最小值,用transform让结果保留和原DataFrame一致的索引结构,确保能直接与原列做运算。 - 计算每行
v值与对应分组最小值的差值,筛选出差值不超过25的行。
具体代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({"v":[x*x for x in range(12)]}, index=pd.MultiIndex.from_product([["a","b","c"],[1,2,3,4]])) # 计算每个分组的最小值,保留原索引结构 group_min = df.groupby(level=0)['v'].transform('min') # 筛选满足条件的行 result = df[df['v'] - group_min <= 25] print(result)
运行后得到的结果与预期一致:
v a 1 0 2 1 3 4 4 9 b 1 16 2 25 3 36 c 1 64 2 81
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

