比方说,我在Python中有一个像这样的数组:
array=[[1,2,5,6],
[1,3,6,7],
[1,2,3,4],
[2,3,9,8]]
,我想以此为基础创建一个数组,该数组将重复的第一和第二数据的第三和第四数据信息相加。也就是说,唯一数组应如下所示:
[[1,2,8,10],
[1,3,6,7],
[2,3,9,8]]
有办法吗?我确定numpy有一个很酷的功能,可以高效地执行它,但是我找不到它。
答案 0 :(得分:1)
使用numpy_indexed
库,该库提供矢量化的分组操作和许多其他实用程序功能:
import numpy_indexed as npi
np.hstack(npi.group_by(arr[:, :2]).sum(arr[:, 2:]))
array([[ 1, 2, 8, 10],
[ 1, 3, 6, 7],
[ 2, 3, 9, 8]])
答案 1 :(得分:0)
如果您不关心性能,Pandas提供直观的语法:
import numpy as np, pandas as pd
A = np.array([[1,2,5,6],
[1,3,6,7],
[1,2,3,4],
[2,3,9,8]])
res = pd.DataFrame(A).groupby([0, 1], sort=False).sum()\
.reset_index().values
print(res)
array([[ 1, 2, 8, 10],
[ 1, 3, 6, 7],
[ 2, 3, 9, 8]], dtype=int64)