You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于外部向量在for循环中过滤数据?代码失效问题排查

问题原因
  • 遍历对象错误:你把uni定义为单个字符串"Bob",Julia中遍历字符串会逐个取出字符,所以for nm in uni实际循环的是'B'、'o'、'b'这三个字符,而数据框里没有名字等于单个字符的行,自然得不到预期结果。
  • 循环赋值覆盖:就算遍历的是正确名字,每次循环都会重新给aa_loop赋值,最终只会保留最后一次循环的结果,无法收集所有符合条件的行(如果uni是多个名字的话)。
正确实现

情况1:uni是单个名字(无需循环)

如果只是过滤单个名字,直接用subset即可:

names = ["Sally", "Bob", "Alice", "Hank"]
grades = [1, 5, 8.5, 4]
aaa = DataFrame(name=names, grades=grades)

uni = "Bob"
aa_loop = subset(aaa, :name => ByRow(==(uni)))

情况2:uni是多个名字的向量

如果uni包含多个名字,比如uni = ["Bob", "Alice"],有两种实现方式:

方式1:循环收集结果

初始化空数据框,循环每个名字并追加符合条件的行:

names = ["Sally", "Bob", "Alice", "Hank"]
grades = [1, 5, 8.5, 4]
aaa = DataFrame(name=names, grades=grades)

uni = ["Bob", "Alice"]
aa_loop = DataFrame()
for nm in uni
    temp = subset(aaa, :name => ByRow(==(nm)))
    append!(aa_loop, temp)
end

方式2:向量化过滤(更高效)

用in函数直接过滤,无需循环:

names = ["Sally", "Bob", "Alice", "Hank"]
grades = [1, 5, 8.5, 4]
aaa = DataFrame(name=names, grades=grades)

uni = ["Bob", "Alice"]
aa_loop = subset(aaa, :name => ByRow(x -> x in uni))
# 简洁写法:
aa_loop = subset(aaa, :name => ∈(uni))

内容的提问来源于stack exchange,提问作者awoj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:15