如何在Pandas中按区间(bins)分组?是否需使用聚合函数?
Pandas按区间分组并聚合Ctr值
直接用pd.cut()划分区间,再配合groupby()+sum()就能轻松实现需求,不需要复杂操作。
步骤示例:
- 准备示例数据
import pandas as pd df = pd.DataFrame({ 'Position': [3, 12, 7, 18, 25, 9, 15, 22], 'Ctr': [0.05, 0.03, 0.07, 0.02, 0.01, 0.06, 0.04, 0.02] })
- 划分Position区间
用range()生成等距区间,通过pd.cut()给每条数据打上区间标签:
# 生成区间范围(1-10,11-20...,上限可根据数据最大值调整) bins = range(1, df['Position'].max() + 11, 10) # 自定义区间显示标签 labels = [f'{start}-{start+9}' for start in bins[:-1]] # 添加区间列到DataFrame df['Position_Group'] = pd.cut( df['Position'], bins=bins, labels=labels, include_lowest=True # 确保最小值被包含在第一个区间内 )
- 按区间分组求和
直接对区间列分组,聚合Ctr的总和:
# 分组并计算Ctr总和 agg_result = df.groupby('Position_Group')['Ctr'].sum().reset_index() print(agg_result)
输出结果:
Position_Group Ctr 0 1-10 0.24 1 11-20 0.09 2 21-30 0.03
关键说明:
pd.cut()是处理数值区间分组的核心工具,支持自定义区间范围和标签- 聚合仅需
sum()即可,不需要额外复杂的聚合函数 - 如果你的Position最大值更大,只需调整
bins的上限(比如range(1, 101, 10)就能覆盖1-100的区间)
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

