首页 > 解决方案 > 如何获取取决于数据框列子集的新列

问题描述

我的数据框有 3 列AB并且C对于每一行,这些列中只有一个包含一个值。

我想要一MERGE列包含来自AorB的值C

using DataFrames

df = DataFrame(NAME = ["a", "b", "c"], A = [1, missing, missing], B = [missing, 2, missing], C = [missing, missing, 3])

3×4 DataFrame
│ Row │ NAME   │ A       │ B       │ C       │
│     │ String │ Int64?  │ Int64?  │ Int64?  │
├─────┼────────┼─────────┼─────────┼─────────┤
│ 1   │ a      │ 1       │ missing │ missing │
│ 2   │ b      │ missing │ 2       │ missing │
│ 3   │ c      │ missing │ missing │ 3       │

julia如何获得MERGE柱子的最佳方式?

3×5 DataFrame
│ Row │ NAME   │ A       │ B       │ C       │ MERGE │
│     │ String │ Int64?  │ Int64?  │ Int64?  │ Int64 │
├─────┼────────┼─────────┼─────────┼─────────┼───────┤
│ 1   │ a      │ 1       │ missing │ missing │ 1     │
│ 2   │ b      │ missing │ 2       │ missing │ 2     │
│ 3   │ c      │ missing │ missing │ 3       │ 3     │

到目前为止,我能够解决的是:

select(df, :, [:A, :B, :C] => ByRow((a,b,c) -> sum(skipmissing([a, b, c]))) => :MERGE)

对于列的可变范围的场景呢?

select(df, range => ??? => :MERGE)

标签: juliajulia-dataframe

解决方案


你可以这样写:

julia> transform!(df, [:A, :B, :C] => ByRow(coalesce) => :MERGE)
3×5 DataFrame
│ Row │ NAME   │ A       │ B       │ C       │ MERGE │
│     │ String │ Int64?  │ Int64?  │ Int64?  │ Int64 │
├─────┼────────┼─────────┼─────────┼─────────┼───────┤
│ 1   │ a      │ 1       │ missing │ missing │ 1     │
│ 2   │ b      │ missing │ 2       │ missing │ 2     │
│ 3   │ c      │ missing │ missing │ 3       │ 3     │

代替[:A, :B, :C]您可以放置​​任何选择器,例如All(),Between(:A, :C)1:3


推荐阅读