基于多个值过滤numpy的阵列结构 [英] Filter numpy structured array based on multiple values
本文介绍了基于多个值过滤numpy的阵列结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个numpy的结构数组。
I have a numpy structured array. :
myArray = np.array([(1, 1, 1, u'Zone3', 9.223),
(2, 1, 0, u'Zone2', 17.589),
(3, 1, 1, u'Zone2', 26.95),
(4, 0, 1, u'Zone1', 19.367),
(5, 1, 1, u'Zone1', 4.395)],
dtype=[('ID', '<i4'), ('Flag1', '<i4'), ('Flag2', '<i4'), ('ZoneName', '<U5'),
('Value', '<f8')])
我想,当多个条件都满足,从值列中的值相加。如果我想和标志1为标志2 == 1,我可以使用:
I would like to sum the values from the "Value" column when multiple criteria are met. If I want Flag1 and Flag2 to ==1 i can use:
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1))]["Value"]))
不过,我也想包括基于第三标准值是否是列表中的,相当于使用的东西中X列表
:
criteriaList = ("Zone1", "Zone2")
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1) &
(myArray["ZoneName"] in criteriaList))]["Value"]))
这应该等于31.345。我是新来numpy的和已经探索蒙面阵列,但如果还是怎样,如果这些可以用结构化的阵列可以使用我并不清楚。谢谢你。
Which should equal 31.345. I am new to numpy and have explored masked arrays, but am not clear if how or if these can be used with structured arrays. Thanks.
推荐答案
您需要使用的 np.in1d
来测试的会员你的 criteriaList
:
In [1]: myArray["ZoneName"] in criteriaList
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-ff2173ff4348> in <module>()
----> 1 myArray["ZoneName"] in criteriaList
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
In [2]: np.in1d(myArray["ZoneName"], criteriaList)
Out[2]: array([False, True, True, True, True], dtype=bool)
In [3]: myArray[(myArray["Flag1"] == 1) &
....: (myArray["Flag2"] == 1) &
....: np.in1d(myArray["ZoneName"], criteriaList)]["Value"].sum()
Out[3]: 31.344999999999999
这篇关于基于多个值过滤numpy的阵列结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文