您如何根据数据框中的某些数字计算总和?

rio*_*oky 1 python numpy pandas

我有这样的变量

a = pd.DataFrame(np.array([[1, 1, 2, 3, 2], [2, 2, 3, 3, 2], [1, 2, 3, 2, 3]]))

b = np.array([0.1, 0.3, 0.5, 0.6, 0.2])
Run Code Online (Sandbox Code Playgroud)

展示 a

   0    1      2      3      4                                         
0  1    1      2      3      2                    
1  2    2      3      3      2
2  1    2      3      2      3
Run Code Online (Sandbox Code Playgroud)

展示 b

[0.1    0.3    0.5    0.6    0.2]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是b基于a其中的索引a作为 中值的索引的值的总和b

我想要的最终结果是这样的。

 0.4   0.7  0.6
   0   0.5  0.11                     
 0.1   0.9  0.7
Run Code Online (Sandbox Code Playgroud)

如何详细获取第一行

 0.4   0.7  0.6
Run Code Online (Sandbox Code Playgroud)
  • so0.4是从 中获得的0.1 + 0.3,基于 的第一行中的数字 1 a,即由于索引是01,我们添加b[0]b[1]

  • 0.7是从 中获得的0.5 + 0.2,基于索引所在的数字 224,所以我们添加了b[2] + b[4]

  • 0.6基于数字 3 这只是b[3]因为索引是3

ayh*_*han 6

您可以创建单热编码矩阵以在点积中使用:

from pandas.api.types import CategoricalDtype
n = a.max().max()
cat = CategoricalDtype(categories=np.arange(1, n + 1))
dummies = pd.get_dummies(a.T.astype(cat))
b.dot(dummies).reshape(n, n)
Run Code Online (Sandbox Code Playgroud)

产量

array([[0.4, 0.7, 0.6],
       [0. , 0.6, 1.1],
       [0.1, 0.9, 0.7]])
Run Code Online (Sandbox Code Playgroud)