首页 > 解决方案 > 基于其他两列的唯一元素(分组)的一列的 Numpy 平均值

问题描述

我有 3 个像这样的 Numpy 数组:

Name Subject Marks

A    Math     89
B    Chem     43
A    Math     98
B    Math     23
A    Chem     57
B    Math     78
B    Math     82
A    Chem     71
A    Math     36
C    Math     89

我想做的是根据此处的第一列和第二列,即:A Math,A Chem,B Math,B Chem,C Math,获得每个不同案例的平均值。(类似于 sql: avg(marks) 按名称和主题分组)。

我已经尝试了很多但徒劳无功,如何在不使用 Pandas 的情况下仅使用 Numpy(可以使用任何功能)来做到这一点?

标签: pythonnumpy

解决方案


import numpy as np
name=np.array(['A','B','A','B','A','B','B','A','A','C'])
subject=np.array(['Math','Chem','Math','Math','Chem','Math','Math','Chem','Math','Math'])
marks=np.array([89,43,98,23,57,78,82,71,36,89])
name_un=np.unique(name)
subj_un=np.unique(subject)
for nm in name_un:
    for subj in subj_un:
        arr=np.array([(True if x==nm and y==subj else False) for x,y in zip(name,subject)])
        if arr.any():
            print(nm,subj,np.mean(marks[arr]))

推荐阅读