如何按全样本分位数对Pandas数据进行分组?
基于分位数对Pandas数据分组的高效方法
直接用Pandas内置的pd.qcut()函数就能解决这个问题,这是专门为分位数分组设计的工具,完全不用手动合并和写一堆if else判断,十分适合你要的十分位数分组场景。
具体步骤:
- 导入依赖库并生成测试数据:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=['a'])
- 用
pd.qcut()生成分组列b:
# 按十分位数划分,生成group 1到group 10的标签 df['b'] = pd.qcut(df['a'], q=10, labels=[f'group {i}' for i in range(1, 11)])
参数说明:
q=10:指定将数据分成10个等频分组(对应十分位数)labels:自定义分组的显示标签,这里用列表生成式快速生成group 1到group 10- 如果遇到数据中有重复值导致分位数相同、无法严格均分的情况,可以添加
duplicates='drop'参数自动调整分组边界,避免报错:
df['b'] = pd.qcut(df['a'], q=10, labels=[f'group {i}' for i in range(1, 11)], duplicates='drop')
验证分组结果
你可以查看每个分组的样本数量,确认是近似等频的:
print(df['b'].value_counts())
内容的提问来源于stack exchange,提问作者Learner_Lee
相关产品推荐
相关产品推荐

