如何使用Pandas获取DataFrame中某百分位数以上的所有值?
获取DataFrame各列75%-100%分位区间的值
核心实现方法
不需要写复杂循环,利用Pandas的广播特性就能高效实现:
- 先计算各列的75%分位数:
n = df.quantile(0.75)
- 直接通过布尔索引筛选出每列中大于等于对应75%分位数的值(不符合条件的位置会显示
NaN,保留原DataFrame结构):
filtered_df = df[df >= n]
如果想提取每列中符合条件的非空值集合,可以用apply方法:
upper_quantile_series = df.apply(lambda col: col[col >= col.quantile(0.75)])
或者整理成字典形式,键为列名,值为对应列的目标值列表:
upper_vals_dict = {col: df[col][df[col] >= df[col].quantile(0.75)].tolist() for col in df.columns}
你之前代码的问题说明
- 第一段代码里
df.mean(n)用法错误:mean()方法不需要传入分位数参数,它是直接计算整列均值,无法实现基于分位数筛选后的均值计算。如果要算各列75%分位以上值的均值,可以用:
upper_quantile_means = df[df >= n].mean()
- 第二段循环逻辑错误:
n.index是列名集合,拿列名i和分位数Seriesn比较没有意义。正确的循环方式应该是遍历每一列,针对列数据做筛选:
n = df.quantile(0.75) for col in df.columns: # 获取当前列的75%分位数 q75 = n[col] # 筛选当前列中符合条件的值 upper_vals = df[col][df[col] >= q75] print(f"列{col}的75%-100%分位值:\n{upper_vals}\n")
内容的提问来源于stack exchange,提问作者Alexandros Horomidis
相关产品推荐
相关产品推荐

