复杂的 NumPy 数组操作

Complex NumPy Array Manipulation

我有两个 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,即红色。该代码将 return 红色类别索引 2 处元素的平均值。它也将对蓝色类别执行相同的操作。

我不知道从哪里开始,欢迎任何想法。

由于源数组的类型,您使用 Numpy 标记标记了 post, 但是使用 Pandas.

生成结果要容易得多,也直观得多

从将两个数组转换为 pandasonic DataFrames 开始。 在转换第一个数组时,在最后一个数组中也转换 01 列到 RedBlue:

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

详情:

  1. 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)。

  2. groupby('key') - 根据上面的结果,通过 key 生成分组 (红色 / 蓝色).

  3. C.mean() - 最后一步是取 C 列(来自每个组) 并计算它的 mean.

  4. 结果是 系列 具有:

    • index - 分组键,
    • value - 为相应组计算的值。
  5. rename('Mean') - 从源列名称更改名称 (C) 更有意义的 Mean.