首页 > 解决方案 > 由于未在所有 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 功率来更快地处理它?

提前谢谢了!!

标签: pythonpandasperformancedataframemerge

解决方案


基于,您可以使用 dask


推荐阅读