如何计算重复的数组值并返回其索引位置?

时间:2019-05-17 14:53:42

标签: python arrays indexing

我有两个具有相关数据的数组。使用xlrd从Excel电子表格中填充数据。这两个数组是:

foundLocations['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts['240.0', '105.0', '24.0', '56.0', '92.0']

这些值一直在变化,但是正如您所看到的,在此示例中,“ D33”出现了两次。

我想将foundCounts [1]和foundCounts [2]的值相加(在此示例中),以得出位置“ D33”以及其他位置的总数。因此,“ D47”将有240.0件。 'D33'将有129.0件。 'D35'将拥有56.0件。 “ PM001”将有92.0件。

预期输出:
D33总计:129.0
D35总数:56.0
D47总数:240.0
PM001总计:92.0

我尝试将数组转换为numpy数组并执行以下操作:

import numpy as np
from numpy import array

a = array(foundLocations)
for r in foundLocations:
    searchval = r
    ii = np.where(a == searchval)[0]
    print(foundCounts[ii])

但是我得到:

  

TypeError:仅整数标量数组可以转换为标量   索引。

1 个答案:

答案 0 :(得分:0)

您似乎希望将字典作为最终结果,因此尚不清楚numpy是否真的是正确的选择。

这是一种获取总计字典的非numpy方法。这只是使用setdefault()添加到每个键中,以确保定义了每个键,并且总数从零开始:

foundLocations = ['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts = ['240.0', '105.0', '24.0', '56.0', '92.0']

totals = {}
for loc, count in zip(foundLocations, foundCounts):
    totals[loc] = totals.setdefault(loc, 0) + float(count)

totals

输出:

{'D47': 240.0, 'D33': 129.0, 'D35': 56.0, 'PM001': 92.0}