我有两个df,两个df都有一些公用列,这些列未包含在on
列表中。如果添加makeunique
参数,它将创建后缀为_n的新列。无论如何,我可以将诸如['_left','_ right']之类的前缀值传递给结果df吗?
在熊猫中,我可以传递一些参数lsuffix
和rsuffix
。
样本输入:
Df1:
│ Row │ ID │ Name │
│ │ Int64 │ String │
├─────┼───────┼─────────┤
│ 1 │ 1 │ Mohamed │
│ 2 │ 2 │ Thasin │
Df2:
│ Row │ ID │ Job │ Name │
│ │ Int64 │ String │ String │
├─────┼───────┼────────┼────────┤
│ 1 │ 1 │ Tech │ Md │
│ 2 │ 2 │ Tech │ Tn │
│ 3 │ 3 │ Assist │ Rj │
│ 4 │ 4 │ Test │ Mi │
内部加入结果:
innerjoin(people, jobs, on = :ID, makeunique=true)
│ Row │ ID │ Name │ Job │ Name_1 │
│ │ Int64 │ String │ String │ String │
├─────┼───────┼─────────┼────────┼─────────┤
│ 1 │ 1 │ Mohamed │ Tech │ Md │
│ 2 │ 2 │ Thasin │ Tech │ Tn │
预期输出:
| Row │ ID │ Name_left│ Job │ Name_right │
│ │ Int64 │ String │ String │ String │
├─────┼───────┼─────────┼────────┼─────────┤
│ 1 │ 1 │ Mohamed │ Tech │ Md │
│ 2 │ 2 │ Thasin │ Tech │ Tn │
答案 0 :(得分:2)
这尚未实现。您可以预计它将在今年添加。参见https://github.com/JuliaData/DataFrames.jl/issues/1333。
您目前可以做的是:
innerjoin(rename!(s -> s == "ID" ? "ID" : s*"_left", DataFrame!(people)),
rename!(s -> s == "ID" ? "ID" : s*"_right", DataFrame!(jobs)),
on = :ID)
如果您不关心效率,并且希望使用较短的代码,请使用
innerjoin(rename(s -> s == "ID" ? "ID" : s*"_left", people),
rename(s -> s == "ID" ? "ID" : s*"_right", jobs),
on = :ID)