如何解决有没有办法对当前在 Pandas 数据帧中的行进行迭代的代码进行矢量化?
我现在有一些代码可以正常工作,但速度太慢了。我正在尝试将 Pandas 数据框中每一行的加权平方和相加。我想对这些操作进行矢量化——这似乎运行得快得多——但是代码中的一个问题使我的矢量化尝试失败了。
await
该行有 'students'(一个整数)、distance(一个长度为 n 的 numpy 数组)和 schoolChoice(一个小于或等于 n-1 的整数,它指定我使用的距离数组的哪个元素)计算)。基本上,我从 numpy 数组中提取特定于行的值。我使用过 df.lookup,但实际上它似乎更慢并且正在被弃用。关于如何使这个运行更快的任何建议?提前致谢!
解决方法
如果所有其他方法都失败了,您可以在每一行使用 .apply()
totalSum = df.apply(lambda row: row.distance[row.schoolChoice] ** 2 * row.students,axis=1).sum()
为了更快,您可以导入 numpy
totalSum = (numpy.stack(df.distance)[range(len(df.schoolChoice)),df.schoolChoice] ** 2 * df.students).sum()
numpy 方法要求每行的距离长度相同 - 但是如果需要,可以将它们填充到相同的长度。 (尽管这可能会影响取得的任何收益。)
在 150,000 行的 df 上进行测试,例如:
distance schoolChoice students
0 [1,2,3] 0 4
1 [4,5,6] 2 5
2 [7,8,9] 2 6
3 [1,3] 0 4
4 [4,6] 2 5
时间:
method time
0 for loop 15.9s
1 df.apply 4.1s
2 numpy 0.7s
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。