如何在Python的NumPy数组中按5年间隔自动聚合计算均值
自动按年龄组计算性别均值的NumPy实现
针对你需要按5年间隔分组计算不同性别均值的需求,可以通过以下几种NumPy原生方法自动实现,无需手动提取每组数据:
方法一:数组重塑+维度求均值
这种方法适用于数据按年份顺序排列、每组样本数固定的场景(比如你的10行数据刚好分成2组,每组5行):
import numpy as np arr = np.array([[0,1], [2,3], [3,4], [4,5], [5,6], [7,8], [8,9], [9,10], [10,11], [11,12]]) # 将原(10,2)数组重塑为(2,5,2),对应2个年龄组、每组5个样本、2个性别维度 grouped_arr = arr.reshape(2, 5, 2) # 对每组内的样本维度(axis=1)求均值,得到每个年龄组的性别均值 result = grouped_arr.mean(axis=1) print(result)
输出结果:
[[ 2.8 3.8] [ 9. 10. ]]
方法二:分组切片+列表推导式
如果需要更灵活的分组逻辑(比如每组样本数不固定),可以用np.split拆分数组后逐个计算均值:
import numpy as np arr = np.array([[0,1], [2,3], [3,4], [4,5], [5,6], [7,8], [8,9], [9,10], [10,11], [11,12]]) # 按行将数组拆分为2个组,每组5行 groups = np.split(arr, 2) # 对每个组按列求均值,再合并为结果数组 result = np.array([group.mean(axis=0) for group in groups]) print(result)
输出结果和方法一完全一致。
通用场景扩展(可选)
如果你的年龄数据不是按顺序连续排列,需要按实际年龄区间(比如0-4岁、5-9岁)分组,可以用np.digitize生成分组标签,再筛选计算均值:
import numpy as np arr = np.array([[0,1], [2,3], [3,4], [4,5], [5,6], [7,8], [8,9], [9,10], [10,11], [11,12]]) ages = arr[:, 0] # 提取年龄列 # 定义年龄区间的分界点,这里按5年分组 bins = [0, 5, 10, 15] # 生成每个年龄对应的分组标签 labels = np.digitize(ages, bins) # 计算每个分组内的性别均值 result = [] for label in np.unique(labels): # 筛选当前分组的所有行,按列求均值 group_mean = arr[labels == label].mean(axis=0) result.append(group_mean) result = np.array(result) print(result)
内容的提问来源于stack exchange,提问作者Stata_user
相关产品推荐
相关产品推荐

