如何在python中基于相似项对ND数组求和?

如何在python中基于相似项对ND数组求和?,python,numpy,Python,Numpy,假设我有一个python中的ND数组,由以下方案表示: ["Event ID", "Event Location", "Event Cost"] data = \ [[1, 0, 500] [1, 0, 250] [1, 1, 300] [2, 0, 750] [2, 1, 400] [2, 1, 500]] 我如何折叠此数组以汇总在同一事件位置发生的具有相同事件ID的条目的成本?这将在最后为我提供以下数组: [[1, 0, 750] [1, 1, 300] [2, 0, 750] [2, 1

假设我有一个python中的ND数组,由以下方案表示:

["Event ID", "Event Location", "Event Cost"]
data = \
[[1, 0, 500]
[1, 0, 250]
[1, 1, 300]
[2, 0, 750]
[2, 1, 400]
[2, 1, 500]]
我如何折叠此数组以汇总在同一事件位置发生的具有相同事件ID的条目的成本?这将在最后为我提供以下数组:

[[1, 0, 750]
[1, 1, 300]
[2, 0, 750]
[2, 1, 900]]

这是一个典型的用例:

导入itertools
结果=[
[i,loc,sum(成本中的成本)]
对于(i,loc),itertools.groupby中的成本(数据,key=lambda t:(t[0],t[1]))
]

这是一个典型的使用案例:

导入itertools
结果=[
[i,loc,sum(成本中的成本)]
对于(i,loc),itertools.groupby中的成本(数据,key=lambda t:(t[0],t[1]))
]

我喜欢两种方法:

使用索引的
numpy\u
包: 输出:

_ = 
[[1 0], 
[1 1], 
[2 0], 
[2 1]]
sums = [750, 300, 750, 900]
np.vstack(sums) = 
[[750]
 [300]
 [750]
 [900]]
result = 
[[  1   0 750]
 [  1   1 300]
 [  2   0 750]
 [  2   1 900]]
使用熊猫:
我喜欢两种方法:

使用索引的
numpy\u
包: 输出:

_ = 
[[1 0], 
[1 1], 
[2 0], 
[2 1]]
sums = [750, 300, 750, 900]
np.vstack(sums) = 
[[750]
 [300]
 [750]
 [900]]
result = 
[[  1   0 750]
 [  1   1 300]
 [  2   0 750]
 [  2   1 900]]
使用熊猫:
我用熊猫和下面的一行来解决这个问题:

dg = data.groupby(['Event ID', 'Event Location'])['Event Cost'].sum().reset_index()

我用熊猫和下面的一行来解决这个问题:

dg = data.groupby(['Event ID', 'Event Location'])['Event Cost'].sum().reset_index()

你考虑过使用熊猫和群比吗?这能回答你的问题吗@这位物理学家回答了我的问题。熊猫工作得很好。你考虑过使用熊猫和groupby吗?这能回答你的问题吗@这位物理学家回答了我的问题。Pandas工作得很好。如果你在一个numpy数组上分组,它仍然是一个经典用例吗(我不这么认为…)。我没有说它不工作,只是它的性能不是很好。如果你在一个numpy数组上分组,它仍然是一个经典用例吗(我不这么认为…)。我没有说它不工作,只是它的性能不是很好。