多Hgroup不同Max值时,用np.arange和pd.cut计算分组均值
针对多Hgroup分组的分箱均值计算方案
核心思路
按Hgroup分组后,对每个子组单独使用自身的Max_HG_value生成分箱区间,再对LowGroup分箱并计算Value的分组均值。
示例数据构造
先模拟符合需求的DataFrame:
import pandas as pd import numpy as np # 构造示例数据 data = { 'Hgroup': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'LowGroup': [5, 15, 25, 35, 10, 20, 30, 40], 'Value': [100, 200, 300, 400, 150, 250, 350, 450], 'Max_HG_value': [40, 40, 40, 40, 50, 50, 50, 50] } df = pd.DataFrame(data)
实现代码
定义分组处理函数,再通过groupby.apply批量执行:
def calculate_group_mean(group, bin_step=10): # 获取当前组的Max值(组内该值唯一,取第一个即可) max_val = group['Max_HG_value'].iloc[0] # 生成分箱区间:从0到max_val,步长为bin_step bins = np.arange(0, max_val + bin_step, bin_step) # 给LowGroup打箱标签,左闭右开区间避免边界重复 group['bin'] = pd.cut(group['LowGroup'], bins=bins, right=False) # 计算每个箱的Value均值,重置索引优化结果格式 return group.groupby('bin')['Value'].mean().reset_index() # 按Hgroup分组执行逻辑 result = df.groupby('Hgroup').apply(calculate_group_mean) # 可选:调整索引结构,把Hgroup从索引转为列 result = result.reset_index(level=0).rename(columns={'level_0': 'Hgroup'})
关键细节说明
bin_step参数可自定义分箱步长,按需调整粒度- 若组内
Max_HG_value存在不一致,可先做Hgroup+Max_HG_value的联合分组,确保每个子组对应唯一Max值 - 存在缺失值时,可在函数内添加
group = group.dropna(subset=['LowGroup', 'Value'])过滤无效数据
内容的提问来源于stack exchange,提问作者Gustavo De Leon
相关产品推荐
相关产品推荐

