我有2列的numpy数组。第二列代表我要减少的键。
>>> x
array([[0.1 , 1. ],
[0.25, 1. ],
[0.45, 0. ],
[0.55, 0. ]])
我想总结所有共享一个键的值,像这样。
>>>sum_key(x)
array([[0.35 , 1. ],
[1.0, 0. ]])
这似乎是一个相对普遍的任务,但我找不到很好的名字或看到它进行讨论。 有什么想法吗?
答案 0 :(得分:0)
这有点复杂,但是应该可以完成工作:
import numpy as np
x = np.array([[0.1 , 1. ],
[0.25, 1. ],
[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]]
答案 1 :(得分:0)
import numpy as np
import pandas as pd
data = np.array([[0.1 , 1. ],
[0.25, 1. ],
[0.45, 0. ],
[0.55, 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)
答案 2 :(得分:0)
如果索引(键)是升序整数(或者可以根据情况轻松转换),则最方便的方法是使用 np.bincount。
import numpy as np
x = np.array([[0.1 , 1. ],
[0.25, 1. ],
[0.45, 0. ],
[0.55, 0. ]])
v = x[:, 0]
i = x[:, 1]
counts = np.bincount(i.astype(int), v)
print(counts)
# returns [1. 0.35]