julia - 如何获取取决于数据框列子集的新列
问题描述
我的数据框有 3 列A
,B
并且C
对于每一行,这些列中只有一个包含一个值。
我想要一MERGE
列包含来自A
orB
的值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)
解决方案
你可以这样写:
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
。
推荐阅读
- sql - Knex.js 从逗号分隔中获取值
- typescript - Typescript 中部分类型的联合不能进行类型缩小
- c# - 默认 Blazor 模板在 Azure 上不起作用
- sql - 在 SELECT 语句中使用 HAVING 和 AS 时无法识别列
- c++ - 链接我的库时 LNK2005 已定义错误
- r - 逗号分隔因变量在线性回归中意味着什么?
- javascript - 如何在一个组件中显示一个或多个细节 - React Native?
- python - 我最近学习了高阶函数。我尝试使用高阶函数编写一些代码,但我被卡住了
- sql - Netezza 错误数据分区已满 - 多次调用存储过程时
- codeigniter - 如何在验证失败时预填充级联下拉列表和附件