python - 基于其他两列的唯一元素(分组)的一列的 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(可以使用任何功能)来做到这一点?
解决方案
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]))
推荐阅读
- html - Bootstrap:行超出父容器并相互重叠
- c - 用 char 指针和 strcpy 理解 malloc
- go - 不能在赋值中使用 (type interface {}) 作为 int 类型:需要类型断言
- c# - 空接口代码在用于向通用接口添加约束时是否有异味?
- azure-devops - 您可以在不下载工件的情况下读取它的属性吗?
- excel - 循环通过包含公式的范围时出现类型不匹配错误 13
- php - 无法访问@include 之外的变量
- excel - Excel VBA If 语句的正确语法是什么
- outlook - 修改了重复约会中单个实例/异常的描述,在 Outlook 中没有反映?
- android - 从 Play 商店获取拒绝消息“您的应用容易受到 Intent 重定向”