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

How to add suffix or prefix for duplicate columns in julia?

我有两个 df,两个 df 都有一些公共列,这些列未包含在 on 列表中。如果我添加 makeunique 参数,它会创建后缀为 _n 的新列。无论如何我可以将 ['_left', '_right'] 之类的前缀值传递给结果 df 吗? 在 pandas 中,我可以传递一些参数 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      │ 

这还没有实现。您可以预期它会在今年添加。参见 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)