我在python中有一个二维numpy数组:
[[ 1 2 1 3 3]
[10 20 30 40 60]]
我希望在删除列之前,让第一行中的唯一值和将第二行中的相应值相加。所以,我的数组的输出是这样的:
[[ 1 2 3 ]
[ 40 20 100 ]]
我是python的新手,对于更大的规模,我想不出有效的方法。
发布于 2018-10-30 23:46:01
不幸的是,numpy
没有内置的groupby函数(尽管有ways to write them)。如果您对使用pandas
持开放态度,那么这将非常简单:
import pandas as pd
>>> pd.DataFrame(a.T).groupby(0,as_index=False).sum().values.T
array([[ 1, 2, 3],
[ 40, 20, 100]])
发布于 2018-10-30 23:45:01
a = np.array([[ 1, 2, 1, 3, 3],
[10, 20, 30, 40, 60]])
unique_values = np.unique(a[0])
new_array = np.zeros((2, len(unique_values)))
for i, uniq in enumerate(np.unique(a[0])):
new_array[0][i] = uniq
new_array[1][i] = np.where(a[0]==uniq,a[1],0).sum()
发布于 2018-10-30 23:45:30
我认为你不会比使用字典记录计数然后创建数组的效率更高:
from collections import defaultdict
import numpy
sums = defaultdict(float)
arr = numpy.array([[ 1, 2, 1, 3, 3],
[10, 20, 30, 40, 60]]
for key, value in zip(*arr):
sums[key] += value
numpy.array(list(sums.items())).T
返回
array([[ 1., 2., 3.],
[ 40., 20., 100.]])
https://stackoverflow.com/questions/53067931
复制相似问题