如何在python中基于相似项对ND数组求和?
假设我有一个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
["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数组上分组,它仍然是一个经典用例吗(我不这么认为…)。我没有说它不工作,只是它的性能不是很好。