首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过添加相应的值在2D numpy数组中创建唯一行

通过添加相应的值在2D numpy数组中创建唯一行
EN

Stack Overflow用户
提问于 2018-10-30 23:38:07
回答 4查看 42关注 0票数 1

我在python中有一个二维numpy数组:

[[ 1  2  1  3  3]
 [10 20 30 40 60]]

我希望在删除列之前,让第一行中的唯一值将第二行中的相应值相加。所以,我的数组的输出是这样的:

[[  1   2   3 ]
 [ 40  20 100 ]]

我是python的新手,对于更大的规模,我想不出有效的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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]])
票数 3
EN

Stack Overflow用户

发布于 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()
票数 0
EN

Stack Overflow用户

发布于 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.]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53067931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档