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,即由于索引是0和1,我们添加b[0]和b[1]
0.7是从 中获得的0.5 + 0.2,基于索引所在的数字 22和4,所以我们添加了b[2] + b[4]
0.6基于数字 3 这只是b[3]因为索引是3
您可以创建单热编码矩阵以在点积中使用:
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)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |