如何在julia中为重复的列添加后缀或前缀?

时间:2020-07-06 06:33:43

标签: julia julia-dataframe

我有两个df,两个df都有一些公用列,这些列未包含在on列表中。如果添加makeunique参数,它将创建后缀为_n的新列。无论如何,我可以将诸如['_left','_ right']之类的前缀值传递给结果df吗? 在熊猫中,我可以传递一些参数lsuffixrsuffix

样本输入:

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      │ 

1 个答案:

答案 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)
相关问题