如何在Julia DataFrames中使用OR条件筛选指定列值为1的行?
在Julia DataFrames中实现多条件行筛选(AND/OR)
解决OR条件筛选问题
你当前代码中subset的多个参数默认是AND逻辑,所以只会保留两列都为1的行。要实现OR逻辑,只需将两列的判断整合到同一个ByRow函数中,用||表示“或”:
pci_or_cabg = @chain df begin select([:During_Cabg, :During_Pci] .=> ByRow(x -> coalesce(x, 0)); renamecols=false) subset([:During_Cabg, :During_Pci] => ByRow((cabg, pci) -> cabg == 1 || pci == 1)) end
另一种写法:使用filter函数
如果你觉得subset的写法不够直观,也可以用filter函数直接遍历每一行判断:
pci_or_cabg = @chain df begin select([:During_Cabg, :During_Pci] .=> ByRow(x -> coalesce(x, 0)); renamecols=false) filter(row -> row.During_Cabg == 1 || row.During_Pci == 1, _) end
补充:AND条件的正确写法
如果需要保留两列都为1的行(即原代码的初始逻辑),除了你原来的写法,也可以用整合式的写法,用&&表示“与”:
# AND条件示例 subset([:During_Cabg, :During_Pci] => ByRow((cabg, pci) -> cabg == 1 && pci == 1))
关键说明
subset的多个独立条件参数(如subset(col1 => cond1, col2 => cond2))默认是AND关系,所有条件必须同时满足。- 要实现OR或自定义复合逻辑,需将多列传入同一个
ByRow函数,在函数内部用||/&&组合判断逻辑。
内容的提问来源于stack exchange,提问作者psych0groov3
相关产品推荐
相关产品推荐

