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

Julia中基于A、B列合并3个DataFrame,生成多C列结果

解决方案

要实现以A、B列为键的内连接并输出指定列结构,可按以下步骤操作:

步骤1:重命名C列避免冲突

三个DataFrame都包含C列,直接连接会导致列名重复,因此先将每个DataFrame的C列重命名为目标名称:

# 原地修改原始DataFrame
rename!(df1, :C => :C_df1)
rename!(df2, :C => :C_df2)
rename!(df3, :C => :C_df3)

若不想修改原始数据,可使用非原地修改的rename函数:

df1_renamed = rename(df1, :C => :C_df1)
df2_renamed = rename(df2, :C => :C_df2)
df3_renamed = rename(df3, :C => :C_df3)

步骤2:执行内连接

使用innerjoin函数,指定连接键为[:A, :B],依次合并三个DataFrame,仅保留A、B值完全匹配的行:

# 先合并前两个DataFrame
temp_df = innerjoin(df1_renamed, df2_renamed, on = [:A, :B])
# 再合并第三个DataFrame
result_df = innerjoin(temp_df, df3_renamed, on = [:A, :B])

完整代码示例

using DataFrames

# 构造原始数据
common_data = Dict("A" => [1, 2, 3], "B" => [10, 20, 30])
df1 = DataFrame(merge(common_data, Dict("C" => [100, 200, 300])))
df2 = DataFrame(merge(common_data, Dict("C" => [400, 500, 600])))
df3 = DataFrame(merge(common_data, Dict("C" => [700, 800, 900])))

# 非原地重命名列
df1_renamed = rename(df1, :C => :C_df1)
df2_renamed = rename(df2, :C => :C_df2)
df3_renamed = rename(df3, :C => :C_df3)

# 链式执行内连接
result_df = innerjoin(innerjoin(df1_renamed, df2_renamed, on = [:A, :B]), df3_renamed, on = [:A, :B])

# 输出最终结果
println(result_df)

执行后得到的result_df列结构为[A, B, C_df1, C_df2, C_df3],且仅保留A、B值在三个DataFrame中均匹配的行(示例中所有行都满足匹配条件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:48