4

我有两个 df,两个 df 都有一些未包含在on列表中的常见列。如果我添加makeunique参数,它会创建后缀为 _n where 的新列。无论如何我可以将 ['_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      │ 
4

1 回答 1

3

这还没有实现。您可以期待它会在今年添加。请参阅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)
于 2020-07-06T07:49:45.380 回答