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

Python 3中如何基于索引对二维数据按数量分箱并求均值?

按指定箱大小分箱并计算二维数据均值的实现方案

嘿,我来帮你搞定这个分箱计算均值的需求。首先得明确下:你给的这串一维数据其实是交替排列的两列数据(比如第0、2、4...位是第一列,第1、3、5...位是第二列),要按每箱n个值来分组,然后算出每个箱子里两列各自的均值对吧?

先理清楚步骤

  • 把一维数据转成两列的结构,方便后续处理;
  • 确定每箱包含多少组数据——因为每组是2个值,所以每箱n个值对应的就是n//2组;
  • 把数据按这个大小分箱,然后对每个箱子的两列分别计算均值;
  • 输出最终结果。

两种实现方式

我给你准备了两种方案,一种用numpy(处理大数据更高效顺手),一种纯Python(不用装额外第三方库),你按需选择:

方案一:使用numpy(推荐)

import numpy as np

# 你的原始数据
raw_data = [1, 0.5, 3, 0.6, 5, 0.7, 6, 0.8, 8, 0.9, 10, 1, 11, 1.1, 12, 1.2, 14, 1.3, 15, 1.4, 17, 1.5, 18, 1.6, 19, 1.7, 20, 1.8, 22, 1.9, 24, 2, 25, 2.1, 28, 2.2, 31, 2.3, 35, 2.4]
box_value_count = 4  # 你例子里的每箱4个值,这里可以按需修改

# 转成2列的数组结构
two_column_data = np.array(raw_data).reshape(-1, 2)
# 计算每箱包含的行数(每组数据对应一行)
rows_per_box = box_value_count // 2
# 分箱并计算每个箱子的均值
# 如果数据不能被刚好分完,numpy的array_split会自动处理最后一个箱子
box_means = [box.mean(axis=0) for box in np.array_split(two_column_data, len(two_column_data)//rows_per_box)]

# 打印结果
print("各箱子的均值(第一列,第二列):")
for box_num, mean in enumerate(box_means, 1):
    print(f"第{box_num}箱:{mean[0]:.2f}, {mean[1]:.2f}")

方案二:纯Python实现

raw_data = [1, 0.5, 3, 0.6, 5, 0.7, 6, 0.8, 8, 0.9, 10, 1, 11, 1.1, 12, 1.2, 14, 1.3, 15, 1.4, 17, 1.5, 18, 1.6, 19, 1.7, 20, 1.8, 22, 1.9, 24, 2, 25, 2.1, 28, 2.2, 31, 2.3, 35, 2.4]
box_value_count = 4

# 手动将一维数据转换为两列的列表
two_column = []
for i in range(0, len(raw_data), 2):
    two_column.append([raw_data[i], raw_data[i+1]])

rows_per_box = box_value_count // 2
box_means = []

# 遍历分箱并计算均值
for i in range(0, len(two_column), rows_per_box):
    current_box = two_column[i:i+rows_per_box]
    # 计算第一列的均值
    col1_avg = sum(row[0] for row in current_box) / len(current_box)
    # 计算第二列的均值
    col2_avg = sum(row[1] for row in current_box) / len(current_box)
    box_means.append((col1_avg, col2_avg))

# 输出结果
print("各箱子均值:")
for idx, (avg1, avg2) in enumerate(box_means, 1):
    print(f"箱{idx}: 第一列均值 {avg1:.2f}, 第二列均值 {avg2:.2f}")

示例输出(当box_value_count=4时)

比如你提到的前4个值对应的两组数据[1,0.5]和[3,0.6],第一箱的均值就是(2.0, 0.55),运行代码后会自动算出所有箱子的结果。

小提醒

如果你的原始数据总长度不能被box_value_count整除,最后一个箱子的数值会少一些——上面的两种方案都会自动处理这种情况,你可以根据需求选择是否保留这个不完整的箱子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:48:52