python - 您如何根据数据框中的某些数字计算总和?
问题描述
我有这样的变量
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
so
0.4
是0.1 + 0.3
根据 的第一行中的数字 1 从 获得的a
,即由于索引是0
and1
,我们添加b[0]
andb[1]
0.7
是从 中获得的0.5 + 0.2
,基于索引为2
和的数字 24
,所以我们添加了b[2] + b[4]
0.6
基于数字 3 这只是b[3]
因为索引是3
解决方案
您可以创建 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]])
推荐阅读
- selenium - 测试未在网格上连续执行
- mysql - Mysql仅从列返回模式匹配
- javascript - 关于 JavaScript 编译阶段
- swift - UIImagePickerView 在编辑模式下选择图像时将部分图像留白
- c++ - C ++多态性:如何测试一个类是否派生自另一个基类?
- git - 如何在 Terraform 中使用 git 存储库作为 AWS Lambda 源?
- php - 如何获取 POST 请求大小
- sorting - spark dataframe 自定义 udf 返回一个数组
- angularjs - 浏览器关闭应该在nodejs中调用注销功能
- javascript - 如何在 vuejs 中使用新数据刷新数据表?