You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中DataFrames的最快连接方法是什么?

Julia中更快的DataFrame连接方式

针对你测试的键完全有序且无重复的场景,有几种比默认innerjoin/leftjoin更快的方案:

1. 启用有序键的Merge连接算法

DataFrames.jl的join系列函数默认使用哈希连接(algorithm=:hash),但当连接键已严格有序时,指定algorithm=:merge能大幅降低耗时——这种算法的时间复杂度为O(n),比哈希连接的O(n log n)更高效:

using DataFrames, BenchmarkTools

@btime join(df1, df2, on=:x, kind=:inner, algorithm=:merge)
@btime join(df1, df2, on=:x, kind=:left, algorithm=:merge)

2. 直接拼接列(仅适用于键完全一一对应场景)

如果两个DataFrame的连接键是完全对齐的(比如测试中x均为1:n),无需执行任何连接匹配逻辑,直接合并列即可,这是理论上最快的方式:

# 方式1:构造新DataFrame
@btime DataFrame(x=df1.x, y1=df1.y1, y2=df2.y2)

# 方式2:原地添加列(内存效率最高)
@btime transform!(df1, :y2 => (_->df2.y2) => :y2)

# 方式3:横向合并
@btime hcat(df1, select(df2, :y2))

这类操作本质是内存复制,耗时通常仅几毫秒,远低于常规连接。

3. 使用Polars.jl实现高速连接

Polars是基于Rust的DataFrame库,其连接引擎针对多核并行和内存效率做了深度优化,在处理大型数据集时性能优势明显:

using Polars

# 转换为Polars DataFrame
pl_df1 = Polars.DataFrame(df1)
pl_df2 = Polars.DataFrame(df2)

@btime inner_join(pl_df1, pl_df2, on=:x)
@btime left_join(pl_df1, pl_df2, on=:x)

4. 原地连接减少内存开销

默认连接会创建新的DataFrame,若无需保留原数据,可使用merge!执行原地连接,减少内存分配间接提升速度:

@btime merge!(df1, df2, on=:x)  # 原地执行inner join,会修改df1

内容的提问来源于stack exchange,提问作者Quinten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:17:12