python - 由于未在所有 CPU 内核中充分利用,Python Pandas 合并大型数据集的速度很慢,用于在两个数据帧中查找共同元素
问题描述
由于未在所有 CPU 内核中充分利用,Python Pandas 合并大型数据集的速度很慢,用于在两个数据帧中查找共同元素。需要多处理/多线程/向量化的帮助
问题: [问题:在 Python Python 合并中的所有 CPU 内核中未完全利用。][1]
大多数时候,只有一个 cpu 核心达到 100%。
我正在尝试做的事情:我有两个数据框。我想在两个数据帧(数据帧中> 100k行)中找到公共值
第一个数据帧:df 1 > 100k+ 行和 3 列
// +--------+--------+--------+
// | key | value1 | value2 |
// +--------+--------+--------+
// | zwyL15 | py4wG | 1 |
// | ooooo | FcuaV | 2 |
// | QzK5A | P9uzN | 3 |
// | 3ft53 | orAqp | 4 |
// | epjV | Pjuc | 5 |
// | xjJRqs | VgtK | 6 |
// | pe11M | pXGD | 7 |
// +--------+--------+--------+
复制上面的数据帧 df1 。python中的代码:
df1 = pd.DataFrame({"key": ["zwyL15", "ooooo", "QzK5A", "3ft53", "epjV", "xjJRqs", "pe11M"], "value1":["py4wG", "FcuaV", "P9uzN", "orAqp", "Pjuc", "VgtK", "pXGD"], "value2":["1", "2", "3", "4", "5", "6", "7"]})
第二个数据框:df 2 >10k+ 行和 2 列
钥匙 | 价值3 |
---|---|
WF4F | tLZQz |
fv4 | 2f4 |
比特币 | dfgbt |
8SL | 244fdfg |
哦哦哦 | f34t |
jJRqs6mA | thyy66 |
Xed7 | qd32 |
复制上面的数据帧 df2 。python中的代码:
df2 = pd.DataFrame({"key": ["WF4F", "fv4", "aBiTw", "8SL", "ooooo", "jJRqs6mA", "Xed7"], "value3":["teLZQz", "2f4", "dfgbt", "244fdfg", "f34t", "thyy66", "qd32"]})
这两个数据帧可能有多个共同点或没有共同点。为了找到 2 个数据帧中的共同点,我的代码是:
result_df = df1.merge(df2, how = "inner", on = "key")
我得到的结果如下。它按我的预期工作,但问题是需要很长时间才能处理。
// +-------+---------+--------+--------+
// | key | value1 | value2 | value3 |
// +-------+---------+--------+--------+
// | ooooo | FcuaV | 2 | f34t |
// +-------+---------+--------+--------+
我的主要问题是:如何充分利用所有 cpu 内核甚至 gpu 功率来更快地处理它?
提前谢谢了!!
解决方案
推荐阅读
- java - 在 java 接口声明中使用模板参数
- asp.net-core - 如何在 Asp.Net Core 2.1 应用程序中创建部分视图登录和注册
- python - 在 Python 对象列表中创建列表和求和属性
- ruby - Ruby Gem FFI 不会为 Jekyll 网站构建,mkmf.rb 找不到 ruby 的头文件
- python - 比较两个列表并将列表 1 中的值替换为列表 2 中的值
- html - 模态响应引导
- java - 使用线程更新 volatile 布尔数组
- qt - 如何在 qt 设计器中创建全局可访问的自定义小部件?
- data-structures - 哈希表与其他数据结构,如 AVLTrees
- php - 提交 PHP 表单以将数据作为 XML 存储在文件中