如何高效筛选多DataFrame的10-90分位数数据并保留符合条件行?
多变量分位数区间筛选的简洁实现方案
你可以通过封装复用函数+Pandas批量处理的方式,替代手动逐个变量计算分位数的繁琐操作,直接一次性筛选出所有变量都处于10th-90th分位数区间的行。
简洁实现代码
import pandas as pd def filter_quantile_range(df, target_cols=["Hardness [N]", "Thickness [mm]", "Weight [mg]", "Diameter [mm]"], q_low=0.1, q_high=0.9): # 一次性获取所有目标变量的上下分位数 quantile_vals = df[target_cols].quantile([q_low, q_high]) # 生成所有变量的筛选条件:每列数据都在对应分位数区间内 filter_mask = df[target_cols].apply( lambda col: col.between(quantile_vals.loc[q_low, col.name], quantile_vals.loc[q_high, col.name]) ).all(axis=1) # 返回满足所有条件的行 return df[filter_mask] # 对4个DataFrame分别应用筛选函数 clean_df1 = filter_quantile_range(df1) clean_df2 = filter_quantile_range(df2) clean_df3 = filter_quantile_range(df3) clean_df4 = filter_quantile_range(df4)
代码说明
- 批量获取分位数:通过
df[target_cols].quantile([0.1,0.9])一次性得到所有目标变量的10%和90%分位数,避免重复调用分位数计算函数 - 自动生成筛选条件:用
apply遍历每一列,调用between判断数据是否在区间内,最后用all(axis=1)确保所有变量的条件同时满足(只有当某一行所有列都符合要求时,才会被保留) - 高复用性:函数可以直接复用在所有结构相同的DataFrame上,无需重复编写筛选逻辑
内容的提问来源于stack exchange,提问作者Ben Davis
相关产品推荐
相关产品推荐

