首页 > 解决方案 > DataFrames.jl - leftjoin() - 保留左侧数据框索引定位

问题描述

用于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

我的问题是df110 行和df25 行。df1如果您愿意并希望保留其原始索引位置以及加入时,我将选择成为“主”df 将df1-插入df2匹配df2df1并在不匹配项上输入缺失值但保留 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

反正我能做到这一点吗?

标签: juliadataframes.jl

解决方案


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

现在,在我们添加请求的功能之前,在您的左侧数据框中添加一个带有行 id 的列(在您的示例中已经有这样一个 column :x1)并在该列上对结果进行排序。


推荐阅读