首页 > 解决方案 > 查找列值所在的行(类似于 pandas isin 或 R %in%)

问题描述

using CSV, DataFrames
iris = CSV.read(joinpath(dirname(pathof(DataFrames)),"..","test/data/iris.csv"))

head(iris)
6×5 DataFrame
│ Row │ SepalLength │ SepalWidth │ PetalLength │ PetalWidth │ Species │
│     │ Float64⍰    │ Float64⍰   │ Float64⍰    │ Float64⍰   │ String⍰ │
├─────┼─────────────┼────────────┼─────────────┼────────────┼─────────┤
│ 1   │ 5.1         │ 3.5        │ 1.4         │ 0.2        │ setosa  │
│ 2   │ 4.9         │ 3.0        │ 1.4         │ 0.2        │ setosa  │
│ 3   │ 4.7         │ 3.2        │ 1.3         │ 0.2        │ setosa  │
│ 4   │ 4.6         │ 3.1        │ 1.5         │ 0.2        │ setosa  │
│ 5   │ 5.0         │ 3.6        │ 1.4         │ 0.2        │ setosa  │
│ 6   │ 5.4         │ 3.9        │ 1.7         │ 0.4        │ setosa  │

我想找到 Species 所在的所有行setosavirginica。请注意,答案必须使用查找值数组来查找,因为我希望结果在查找任意多个值时起作用。


有一个叫做 indexin 的函数。它让我走到了一半:

iris[indexin(iris.Species ,["setosa", "virginica"])]

但是当我尝试使用它来建立索引时,结果是:

ERROR: ArgumentError: Only Integer values allowed when indexing by vector of numbers

标签: dataframejulia

解决方案


iris[ in.(iris[:Species],(["virginica","setosa"],)),: ]

额外的tuple环绕["virginica","setosa"]允许避免在搜索列表上广播。


推荐阅读