You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr按条件分组汇总过滤,统计分组分位数上下观测数

批量统计分组数据在全量分位数上下的观测数

给你一套基于Pandas的批量处理方案,直接复用就能解决你的需求,步骤如下:

1. 构造示例数据(模拟你的foo数据集)

import pandas as pd
import numpy as np

np.random.seed(42)
foo = pd.DataFrame({
    'Group': np.repeat(['A', 'B', 'C'], 100),
    'Time': np.tile(np.arange(1, 101), 3),
    'Value': np.random.normal(50, 10, 300)
})

2. 计算全数据集的目标分位数

先基于整个数据集算出10th、50th、90th分位数,作为后续统计的基准:

# 计算分位数并命名,方便后续引用
quantiles = foo['Value'].quantile([0.1, 0.5, 0.9]).round(2)
quantiles.index = ['10th', '50th', '90th']

3. 筛选指定时间段的数据

把Time>25替换成你实际需要的Time>250即可:

filtered_data = foo[foo['Time'] > 25].reset_index(drop=True)

4. 批量处理所有分组与分位数

用groupby+apply自动遍历每个分组,统计每个分位数上下的观测数量:

# 定义统计函数,对单个分组计算所有分位数的上下计数
def count_quantile_stats(group):
    stats = {}
    for q_name, q_val in quantiles.items():
        stats[f'Below_{q_name}'] = (group['Value'] < q_val).sum()
        stats[f'Above_{q_name}'] = (group['Value'] > q_val).sum()
        # 要是需要统计等于分位数的情况,加这行:
        # stats[f'Equal_{q_name}'] = (group['Value'] == q_val).sum()
    return pd.Series(stats)

# 批量应用到所有分组
result = filtered_data.groupby('Group').apply(count_quantile_stats).reset_index()

输出结果示例

运行后你会得到一个清晰的统计表,每个分组对应所有分位数的上下观测数:

Group  Below_10th  Above_10th  Below_50th  Above_50th  Below_90th  Above_90th
0     A           7          68          37          38           1          74
1     B           6          69          39          36           0          75
2     C           7          68          35          40           2          73

补充说明

  • 分位数完全基于全数据集计算,不是分组内的分位数,符合你的需求。
  • 不管你有多少个分组,这段代码都会自动遍历处理,不需要手动逐个指定分组。
  • 要是需要调整分位数的种类(比如加25th、75th),只需要修改quantile()里的参数列表即可。

内容的提问来源于stack exchange,提问作者user111024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:44:53