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

如何利用DataFrame中A列的Decile断点统计多列行数并简化实现?

简化版解决方案:批量处理多列的十分位统计

嘿,我懂你面对大量列时,手动写一堆loc区间判断有多崩溃——咱们来把这个流程彻底简化,让它能轻松适配多列场景!

核心思路

  1. 一次性获取A列的十分位断点:用pd.qcut的retbins=True参数直接拿到分箱边界,不用再从分组结果里手动提取最大值。
  2. 用统一断点批量分箱:拿到断点后,用pd.cut给所有需要统计的列(比如B、C、D...)自动分箱,替换掉繁琐的手动区间判断。
  3. 批量统计合并结果:通过循环处理多列,自动生成每列的分箱计数,再合并成最终表格。

具体代码实现

第一步:读取数据并获取A列的十分位断点

import pandas as pd
import numpy as np

# 读取Excel文件(注意路径前面加r避免转义问题)
df = pd.read_excel(r"E:\Sai\Development\UCG\qcut.xlsx")

# 对A列做10分位划分,同时返回分箱断点(retbins=True)
_, a_bins = pd.qcut(df['a'], 10, retbins=True)

# 可选:把首尾边界设为正负无穷,确保所有数据都能被分箱(避免极端值漏判)
a_bins[0] = -np.inf
a_bins[-1] = np.inf

第二步:对A列和目标列批量分箱

# 给A列添加1-10的分箱标签
df['a_decile'] = pd.cut(df['a'], bins=a_bins, labels=range(1, 11))

# 假设要统计的列是B,这里可以扩展到多列
target_cols = ['b']  # 后续加其他列直接往列表里加就行,比如['b', 'c', 'd']

# 循环给每个目标列分箱
for col in target_cols:
    df[f'{col}_decile'] = pd.cut(df[col], bins=a_bins, labels=range(1, 11))

第三步:统计并合并结果

# 统计A列各分箱的行数
count_a = df['a_decile'].value_counts().sort_index().rename('count_A').reset_index()
count_a = count_a.rename(columns={'index': 'decile'})

# 初始化最终结果表
final_result = count_a

# 循环统计每个目标列的分箱行数,合并到结果表
for col in target_cols:
    count_col = df[f'{col}_decile'].value_counts().sort_index().rename(f'count_{col.upper()}').reset_index()
    count_col = count_col.rename(columns={'index': 'decile'})
    final_result = pd.merge(final_result, count_col, on='decile')

# 添加区间范围列(可选,根据需求调整小数位数)
final_result['Range'] = [f"{a_bins[i]:.2f} → {a_bins[i+1]:.2f}" for i in range(len(a_bins)-1)]

# 调整列顺序,让结果更清晰
final_result = final_result[['Range', 'decile', 'count_A'] + [f'count_{col.upper()}' for col in target_cols]]

为什么这个方案更优?

  • 避免手动区间错误:不用再写一堆(df['b']>x) & (df['b']<=y)的判断,减少写错区间的概率。
  • 轻松扩展多列:只要往target_cols列表里加列名,就能自动完成所有列的统计,完全适配大量列的场景。
  • 逻辑更清晰:从获取断点→分箱→统计的流程一目了然,后续维护也更方便。

小提示

如果你的数据里有缺失值,可以在value_counts里加dropna=False参数,保留缺失值的统计结果:

count_a = df['a_decile'].value_counts(dropna=False).sort_index().rename('count_A').reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:51