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
相关产品推荐
相关产品推荐

