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

NumPy中如何根据一个数组分组计算另一数组对应元素平均值

NumPy按分组键计算对应数组均值的实现方案

针对根据X数组取值对Y数组元素分组求均值的需求,提供两种可直接运行的实现方式:

方法1:纯NumPy实现(无额外依赖)

易读版本(适合中小数据量)

逻辑直观,通过布尔索引筛选每个分组的元素直接计算均值:

import numpy as np

# 示例输入
X = np.array([1, 1, 2, 2, 2, 2, 3, 3])
Y = np.array([10, 30, 15, 10, 16, 10, 15, 20])

# 获取X的所有唯一分组值
unique_groups = np.unique(X)
# 计算每个分组对应的Y均值,结果为字典格式,key是X的取值,value是对应均值
group_means = {group: Y[X == group].mean() for group in unique_groups}

运行结果和示例计算规则完全匹配:

  • X=1对应均值:20.0
  • X=2对应均值:12.75
  • X=3对应均值:17.5

如果需要数组格式输出,直接执行np.array(list(group_means.values()))即可,顺序和unique_groups一一对应。

高性能版本(适合百万级以上大数据量)

避免循环遍历,通过排序+分段聚合提升运行效率:

import numpy as np

X = np.array([1, 1, 2, 2, 2, 2, 3, 3])
Y = np.array([10, 30, 15, 10, 16, 10, 15, 20])

# 按X排序保证同组元素连续
sort_index = np.argsort(X)
X_sorted = X[sort_index]
Y_sorted = Y[sort_index]

# 定位每个分组的起始位置
split_pos = np.flatnonzero(np.r_[True, X_sorted[1:] != X_sorted[:-1]])
# 分段求和、计数后计算均值
group_sum = np.add.reduceat(Y_sorted, split_pos)
group_count = np.diff(np.r_[split_pos, len(X_sorted)])
unique_groups = X_sorted[split_pos]
group_means = group_sum / group_count

方法2:Pandas实现(代码最简洁)

如果日常数据处理已经使用pandas,直接调用分组聚合接口即可,不需要手动处理索引逻辑:

import numpy as np
import pandas as pd

X = np.array([1, 1, 2, 2, 2, 2, 3, 3])
Y = np.array([10, 30, 15, 10, 16, 10, 15, 20])

# 一行代码完成分组求均值,可按需转成字典、数组格式
group_means = pd.Series(Y).groupby(X).mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:42:17