DataFrames.jl - leftjoin() - 保留左数据帧索引定位

DataFrames.jl - leftjoin() - retain left dataframe index positioning

使用leftjoin()连接两个数据帧df1df2

df1 = DataFrame(x1 = collect(1:1:10), x2 = fill(1.0,10))

Row │ x1     x2      
     │ Int64  Float64 
─────┼────────────────
   1 │     1      1.0
   2 │     2      1.0
   3 │     3      1.0
   4 │     4      1.0
   5 │     5      1.0
   6 │     6      1.0
   7 │     7      1.0
   8 │     8      1.0
   9 │     9      1.0
  10 │    10      1.0

df2 = DataFrame(x1 = collect(1:2:10), x2 = fill(1.0,5))

Row │ x1     x2      
     │ Int64  Float64 
─────┼────────────────
   1 │     1      1.0
   2 │     3      1.0
   3 │     5      1.0
   4 │     7      1.0
   5 │     9      1.0

out_df = leftjoin(df1,df2, on = :x1, makeunique=true)

输出:

Row │ x1     x2        x2_1      
     │ Int64  Float64?  Float64?  
─────┼────────────────────────────
   1 │     1       1.0        1.0
   2 │     3       1.0        1.0
   3 │     5       1.0        1.0
   4 │     7       1.0        1.0
   5 │     9       1.0        1.0
   6 │     2       1.0  missing   
   7 │     4       1.0  missing   
   8 │     6       1.0  missing   
   9 │     8       1.0  missing   
  10 │    10       1.0  missing

我的问题是 df1 是 10 行,df2 是 5 行。我选择 df1 作为 'master' df 如果您愿意并希望保留其原始索引定位,并且当加入 df1df2 - df2 插槽时df1 匹配并在不匹配时放入缺失值,但保留输出的 df1 索引定位:

Row │ x1     x2        x2_1      
     │ Int64  Float64?  Float64?  
─────┼────────────────────────────
   1 │     1       1.0        1.0
   2 │     2       1.0        missing
   3 │     3       1.0        1.0
   4 │     4       1.0        missing   
   5 │     5       1.0        1.0
   6 │     6       1.0        missing   
   7 │     7       1.0        1.0
   8 │     8       1.0        missing   
   9 │     9       1.0        1.0   
  10 │    10       1.0        missing

无论如何我可以实现这个?

这是我们计划在未来添加的功能,请参阅https://github.com/JuliaData/DataFrames.jl/issues/2753

现在,在我们添加请求的功能之前,向您的左侧数据框中添加一列,其中包含行 ID(在您的示例中已经有这样一列 :x1),然后在此列上对结果进行排序。