首页 > 解决方案 > 您如何根据数据框中的某些数字计算总和?

问题描述

我有这样的变量

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])

展示a

   0    1      2      3      4                                         
0  1    1      2      3      2                    
1  2    2      3      3      2
2  1    2      3      2      3

展示b

[0.1    0.3    0.5    0.6    0.2]

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

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

 0.4   0.7  0.6
   0   0.5  0.11                     
 0.1   0.9  0.7

如何详细获取第一行

 0.4   0.7  0.6

标签: pythonpandasnumpy

解决方案


您可以创建 one-hot 编码矩阵以在点积中使用:

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)

产量

array([[0.4, 0.7, 0.6],
       [0. , 0.6, 1.1],
       [0.1, 0.9, 0.7]])

推荐阅读