基于现有列条件用DataFrame新增列的简化实现方案咨询
简洁实现方案(含
in函数用法) 核心优化点
通过批量生成转换规则消除重复代码,同时用in函数简化元素存在性判断,让逻辑更直观。
单行批量转换代码
@chain df begin transform([Cols(r"^Col") => ByRow(xs -> any(target in arr for arr in xs) ? "Yes" : "No") => Symbol(target) for target in ["V1", "V2", "V3"]]...) end
代码详解
- 列表推导式一次性生成针对
V1/V2/V3的三个转换规则,避免重复写三次transform any(target in arr for arr in xs):遍历当前行所有Col开头的列的数组,只要任意一个数组包含目标值target,就返回true,对应新列值为"Yes",否则为"No"...用于将列表推导式生成的多个规则展开,让transform一次处理所有新增列
可读性优先的分步版本
如果觉得单行代码过于紧凑,可拆分为更清晰的步骤:
# 定义需要生成的目标列名 target_values = ["V1", "V2", "V3"] # 批量生成转换规则 transform_rules = [ Cols(r"^Col") => ByRow(row_cols -> any(val in col_arr for col_arr in row_cols) ? "Yes" : "No") => Symbol(val) for val in target_values ] # 执行转换 @chain df begin transform(transform_rules...) end
in函数的优势
in是Julia原生的成员判断函数,val in col_arr直接表达“val是否存在于数组col_arr中”的语义,比嵌套的any(y -> y == val, arr)写法更简洁易读,完全匹配你的需求场景。
内容的提问来源于stack exchange,提问作者psych0groov3
相关产品推荐
相关产品推荐

