复杂的 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 开始。
在转换第一个数组时,在最后一个数组中也转换 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')
- 根据上面的结果,通过 key 生成分组
(红色 / 蓝色).
C.mean()
- 最后一步是取 C 列(来自每个组)
并计算它的 mean.
结果是 系列 具有:
- index - 分组键,
- value - 为相应组计算的值。
rename('Mean')
- 从源列名称更改名称 (C)
更有意义的 Mean.
我有两个 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 开始。 在转换第一个数组时,在最后一个数组中也转换 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')
- 根据上面的结果,通过 key 生成分组 (红色 / 蓝色).C.mean()
- 最后一步是取 C 列(来自每个组) 并计算它的 mean.结果是 系列 具有:
- index - 分组键,
- value - 为相应组计算的值。
rename('Mean')
- 从源列名称更改名称 (C) 更有意义的 Mean.