Julia DataFrames如何使用多个值筛选保留指定行?
Julia DataFrames多值筛选的正确方法
你的问题出在df1.id .== in(df1.id, kp_id)这个筛选逻辑上:in(df1.id, kp_id)是判断整个id列是否属于元组kp_id,返回的是单个布尔值false,再用.==广播到整个列后,所有行的筛选条件都是false,自然返回空DataFrame。
下面是几种正确的多值筛选方式:
方法1:矢量化in操作(基础索引法)
利用Julia的广播特性,对每个id元素判断是否在目标集合中,注意要用Ref()包裹目标集合,避免被拆解:
kp_id = (1,2) # 两种等价写法 df1[df1.id .∈ Ref(kp_id), :] df1[in.(df1.id, Ref(kp_id)), :]
方法2:使用filter函数
通过行级别的判断实现筛选,逻辑更清晰:
kp_id = (1,2) filter(row -> row.id ∈ kp_id, df1)
方法3:用@subset宏(简洁语法)
如果安装了DataFramesMeta包,可以用更直观的宏语法:
using DataFramesMeta kp_id = (1,2) @subset(df1, :id ∈ Ref(kp_id))
内容的提问来源于stack exchange,提问作者flee
相关产品推荐
相关产品推荐

