julia - DataFrames.jl - leftjoin() - 保留左侧数据框索引定位
问题描述
用于leftjoin()
连接两个数据框df1
和df2
.
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
如果您愿意并希望保留其原始索引位置以及加入时,我将选择成为“主”df 将df1
-插入df2
匹配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 的列(在您的示例中已经有这样一个 column :x1
)并在该列上对结果进行排序。
推荐阅读
- html - Bootstrap 主题模板中的背景图像似乎没有显示在样式或 div 中
- java - 如何专门输入功能接口的直接声明?
- java - ElasticSearch SearchTemplate 请求 Java API
- python - 如何在记事本中分发我在 python 中创建的列表的输出
- excel - 如何在不使用嵌入式 IF 语句的情况下查找范围内单元格值的索引
- python - Pandas 根据特定列中缺失的整数向前填充整行
- java - gawk 或 grep:单行且不贪婪
- javascript - 修复安装 NPM 包的上游依赖冲突
- html - 文本与表格中单选按钮序列的垂直对齐
- javascript - 如何在 nextjs api 中从浏览器读取 cookie