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

如何用Pandas的groupby/pivot_table/crosstab优化分位数统计汇总方案?

高效实现分位数分组与统计汇总方案

步骤1:为记录分配分位数

直接用qcut将proba字段分成9个等频分位数,自动标记为1-9,这是Pandas原生矢量化操作,处理百万级数据效率拉满:

import pandas as pd

# 假设df是你的原始数据集
df['quantile'] = pd.qcut(df['proba'], q=9, labels=range(1, 10))

步骤2:关联分位数阈值

如果你的阈值存在字典或单独DataFrame里,用merge直接关联,无需循环匹配:

# 示例阈值表,可替换为你的实际阈值数据
thresholds = pd.DataFrame({
    'quantile': range(1, 10),
    'amount_threshold': [100, 200, 300, 400, 500, 600, 700, 800, 900]
})

df = df.merge(thresholds, on='quantile', how='left')

步骤3:标记需审核记录

用矢量化比较替代逐行判断,速度比循环快几个数量级:

df['needs_review'] = df['total_due'] > df['amount_threshold']

步骤4:一键生成统计汇总表

用groupby+agg一次性完成多维度统计,完全避免循环遍历:

# 假设is_flipped是标记审核通过并翻转的字段
summary = df.groupby('quantile').agg(
    总记录数=('quantile', 'count'),
    需审核记录数=('needs_review', 'sum'),  # bool类型True=1,sum直接得到数量
    翻转后总回款=('net_returned', lambda x: x[df.loc[x.index, 'is_flipped']].sum()),
    翻转后总手续费=('total_fees', lambda x: x[df.loc[x.index, 'is_flipped']].sum())
).reset_index()

性能优化补充

  • 数据类型压缩:将quantile设为int8、needs_review设为bool,大幅降低内存占用:
df['quantile'] = df['quantile'].astype('int8')
df['needs_review'] = df['needs_review'].astype('bool')
  • 若数据集超大,可考虑用dask.dataframe做并行处理,无需修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:15:47