arrays - 复杂的 NumPy 数组操作
问题描述
我有两个 numpy 数组:例如
np.array_1([
[5,2,0]
[4,3,0]
[4,2,0]
[3,2,1]
[4,1,1]
])
np.array_2([
[5,2,10]
[4,2,52]
[3,2,80]
[1,2,4]
[5,3,6]
])
在 np.array_1 中,索引 2 处的 0 和 1 代表两个不同的类别。为了论证起见,说 0 = 红色和 1 = 蓝色。
因此,如果前两个元素在两个 numpy 数组中匹配,我需要按类别平均 np.array_2 中的第三个元素。例如,[5,2,10] 和 [4,2,52] 都匹配类别 0,即红色。该代码将返回 Red 类别的索引 2 处元素的平均值。它也将对蓝色类别执行相同的操作。
我不知道从哪里开始,欢迎任何想法。
解决方案
由于源数组的类型,您使用Numpy标签标记了您的帖子,但是使用Pandas生成结果更加容易和直观。
从将两个数组转换为pandasonic DataFrames 开始。在转换第一个数组时,还将最后一列中的0和1转换为Red和Blue:
import pandas as pd
df1 = pd.DataFrame(array_1, columns=['A', 'B', 'key'])
df1.key.replace({0: 'Red', 1: 'Blue'}, inplace=True)
df2 = pd.DataFrame(array_2, columns=['A', 'B', 'C'])
然后,要生成结果,请运行:
result = df2.merge(df1, on=['A', 'B']).groupby('key').C.mean().rename('Mean')
结果是:
key
Blue 80
Red 31
Name: Mean, dtype: int32
细节:
df2.merge(df1, on=['A', 'B'])
- 生成:A B C key 0 5 2 10 Red 1 4 2 52 Red 2 3 2 80 Blue
同时消除不属于任何组的行(既不是Red也不是Blue)。
groupby('key')
- 根据上述结果,按键生成组 (红色/蓝色)。C.mean()
- 最后一步是取C列(来自每个组)并计算其平均值。结果是一个系列:
- index - 分组键,
- value - 为相应组计算的值。
rename('Mean')
- 将名称从源列名称 ( C ) 更改为更有意义的平均值。
推荐阅读
- php - 尝试在购物车为空时显示消息
- sql - 如何划分两个查询
- git - `git branch -r` 输出中的 HEAD
- image - unity - 使用 tcp 套接字将图像从服务器传输到客户端。在代码更改方面需要帮助
- docker - docker 和 kubernetes 的正确代理设置是什么
- c++ - 奇怪的行为将 boost::geometry::within() 用于多边形和环
- wso2-am - WSO2 AM - 为 api 下载客户端 sdk 时,商店生成无效的 zip
- javascript - Reactjs objectlist groupby 和 map over
- c# - Fleck websocket 实现问题。无法使用套接字。发送
- linux - 使用 awk 忽略双引号