如何在Julia中合并含NaN的多列生成指定名称的单列?
在Julia中合并含NaN的多列为单列
针对你提供的DataFrame数据,要将多列合并为单列,取每行第一个非NaN值(全NaN则保留NaN),可以通过以下简洁方法实现:
核心方案:使用coalesce函数结合ByRow
coalesce函数的特性是返回传入参数中第一个非NaN的值,正好适配你的需求。结合DataFrames的ByRow函数,可以对每行的指定列应用该逻辑:
using DataFrames # 初始化示例数据 df = DataFrame( V1 = [3,NaN,1,NaN,NaN], V2 = [NaN,4,NaN,NaN,NaN], V3 = [NaN,NaN,NaN,7,NaN] ) # 生成仅含合并列的新DataFrame df_combined = select(df, ByRow(coalesce) => :V_comb)
执行后得到的df_combined就是你预期的结果:
5×1 DataFrame Row │ V_comb │ Float64 ─────┼───────── 1 │ 3.0 2 │ 4.0 3 │ 1.0 4 │ 7.0 5 │ NaN
扩展用法
- 如果想保留原数据列,同时添加合并列,使用
transform:df_with_comb = transform(df, ByRow(coalesce) => :V_comb) - 如果列数量较多,无需手动列名,
ByRow(coalesce)会自动对所有传入的列生效,也可以通过cols()指定列范围,比如匹配列名前缀:select(df, cols(r"V") => ByRow(coalesce) => :V_comb)
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

