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
相关产品推荐
相关产品推荐

