基于多值过滤numpy结构数组

2024-04-20 11:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy结构化数组。公司名称:

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')])

当满足多个条件时,我想将“值”列中的值求和。如果我想要Flag1和Flag2==1,我可以使用:

^{pr2}$

但是,我还想根据值是否在列表中包含第三个标准,这相当于使用x in list

criteriaList = ("Zone1", "Zone2")
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1) &
                (myArray["ZoneName"] in criteriaList))]["Value"]))

应该等于31.345。我对numpy是个新手,已经研究过掩码数组,但不清楚这些数组是否可以用于结构化数组。谢谢。在


Tags: innumpy名称value公司数组结构化i4
1条回答
网友
1楼 · 发布于 2024-04-20 11:19:47

您需要使用^{}来测试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

相关问题 更多 >