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

Python分类数据分箱并计算各箱计数均值问题求助

解决分组分箱后计算分箱计数平均值的问题

嘿,我来帮你搞定这个问题!作为Python新手,处理这种分组+分箱的需求确实需要一步步拆解,我会把每个步骤都讲清楚,代码也会加详细注释。

首先,我们先明确需求:针对每个cat类别,把data列按指定的bins分箱,统计每个分箱里的数据项数量,再计算这些数量的平均值,最后把这个平均值作为新列添加到原DataFrame中。

完整代码实现

import pandas as pd
import numpy as np

# 1. 构建你的DataFrame(还原你给出的原始数据)
raw_data = {
    'cat': [1, 2, 1, 2, 3, 2, 2, 3, 3, 3, 3, 1, 1],
    'data': [122.8099975, 131.02, 49.123999, 122.5250015, 
             40.86333217, 61.40250025, 122.5999985, 35.02142771, 
             246.320007, 123.885002, 61.942501, 247.770004, 123.885002]
}
df = pd.DataFrame(raw_data)

# 你指定的分箱边界
bins = np.array([0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260])

# 2. 定义函数:计算单个分组的分箱计数平均值
def get_bin_count_mean(group_data, bins):
    # 对当前分组的data列按bins分箱,include_lowest=True确保最小值能被包含进第一个分箱
    bin_groups = pd.cut(group_data, bins=bins, include_lowest=True)
    # 统计每个分箱的数据项数量
    bin_counts = bin_groups.value_counts()
    # 返回这些计数的平均值
    return bin_counts.mean()

# 3. 对每个cat分组应用函数,用transform把结果映射回原DataFrame的每一行
df['bin_count_mean'] = df.groupby('cat')['data'].transform(lambda x: get_bin_count_mean(x, bins))

# 查看结果
print(df)

代码解释

  • 构建DataFrame:我把你给出的原始文本数据转换成了pandas能识别的字典格式,方便后续操作。
  • 分箱与统计函数:get_bin_count_mean函数负责单个分组的处理:先用pd.cut完成分箱,再用value_counts统计每个分箱的数量,最后计算这些数量的平均值。
  • 分组应用:groupby('cat')按类别分组,transform方法会自动把每个分组计算出的平均值,对应到原DataFrame中该组的所有行,这样新列的每个值都和所在行的cat类别匹配。

输出结果示例

运行代码后,你会得到类似这样的结果:

cat        data  bin_count_mean
0     1  122.810000        1.333333
1     2  131.020000        2.000000
2     1   49.124000        1.333333
3     2  122.525002        2.000000
4     3   40.863332        1.250000
5     2   61.402500        2.000000
6     2  122.599999        2.000000
7     3   35.021428        1.250000
8     3  246.320007        1.250000
9     3  123.885002        1.250000
10    3   61.942501        1.250000
11    1  247.770004        1.333333
12    1  123.885002        1.333333

比如cat=1的组有4个数据,分箱后落在3个不同的分箱里,计数分别是1、2、1,平均值就是(1+2+1)/3≈1.333,这个值会被赋给所有cat=1的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:45:50