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

Pandas按多字段分组后对day列分箱并计算分箱内amount均值的实现问题

实现方案

思路:由于不同分组的day范围存在差异,需要在按code1、code2、code3分组后,对每个分组单独生成适配当前组day范围的分箱,再计算每个分箱的amount平均值,最后格式化分箱展示样式即可。

完整代码实现

import pandas as pd
import numpy as np

# 自定义分组处理逻辑
def process_group(group, bin_count=7):
    # 获取当前分组的day范围,生成分箱边界
    min_day = group['day'].min()
    max_day = group['day'].max()
    # 生成等宽分箱边界,bin_count为分箱总数,可自行调整
    bins = np.linspace(min_day, max_day, bin_count + 1, dtype=int)
    # 生成要求格式的分箱标签:[x-y]
    bin_labels = [f"[{bins[i]}-{bins[i+1]}]" for i in range(len(bins)-1)]
    # 对当前分组的day进行分箱
    group['day_bin'] = pd.cut(
        group['day'], 
        bins=bins, 
        labels=bin_labels, 
        include_lowest=True
    )
    # 按分箱分组计算amount平均值,保留分组标识字段
    group_res = group.groupby('day_bin', as_index=False).agg(
        code1 = ('code1', 'first'),
        code2 = ('code2', 'first'),
        code3 = ('code3', 'first'),
        amount = ('amount', 'mean')
    ).rename(columns={'day_bin': 'day'})
    return group_res

# 对原始数据按三个code字段分组,应用处理逻辑
result_df = df.groupby(
    ['code1', 'code2', 'code3'], 
    as_index=False
).apply(process_group).reset_index(drop=True)

# 调整列顺序匹配期望输出
result_df = result_df[['code1', 'code2', 'code3', 'day', 'amount']]

可选调整说明

  • 如果需要固定步长分箱(比如每3天一个箱),可以替换分箱边界生成逻辑:
    # 步长为3的分箱边界生成方式
    bins = np.arange(min_day, max_day + 3, 3, dtype=int)
    
  • 如果需要amount输出为整数,可以修改agg中amount的计算逻辑:
    amount = ('amount', lambda x: round(x.mean()))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:48:03