如何减少基于键而不是轴的numpy数组?

我有2列的numpy数组。第二列代表我要减少的键。

>>> x
array([[0.1,1.  ],[0.25,[0.45,0.  ],[0.55,0.  ]])

我想总结所有共享一个键的值,像这样。

>>>sum_key(x)
array([[0.35,[1.0,0.  ]])

这似乎是一个相对普遍的任务,但我找不到很好的名字或看到它进行讨论。 有什么想法吗?

a21221266 回答:如何减少基于键而不是轴的numpy数组?

这有点复杂,但是应该可以完成工作:

import numpy as np
x = np.array([[0.1,1.  ],[0.25,[0.45,0.  ],[0.55,0.  ]])
keys = x[:,1]
values = x[:,0]
keys_unique = np.unique(keys)
print([[sum(values[keys == k]),k] for k in keys_unique])

输出:

[[1.0,0.0],[0.35,1.0]]
,
import numpy as np
import pandas as pd

data = np.array([[0.1,0.  ]])

df = pd.DataFrame(data)

gr = df.groupby([1])[0].agg('sum')

print(gr.keys().values)

data1 = np.array([[gr[k],k] for k in gr.keys().values])
print(data1)
,

如果索引(键)是升序整数(或者可以根据情况轻松转换),则最方便的方法是使用 np.bincount

import numpy as np

x = np.array([[0.1,0.  ]])

v = x[:,0]
i = x[:,1]

counts = np.bincount(i.astype(int),v)

print(counts)

# returns [1.   0.35]
本文链接:https://www.f2er.com/3140501.html

大家都在问