# Multiple condition findall in dataframes

**URL:** <https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521>\
**Category:** New to Julia\
**Tags:** dataframes\
**Created:** [July 12, 2021, 5:21pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521 "2021-07-12T17:21:35Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![mjanun](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@mjanun](https://discourse.julialang.org/u/mjanun)\
**Post date:** [July 12, 2021, 5:21pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/1 "2021-07-12T17:21:35Z")

</div>

I am trying to use `findall` to find index of items in a dataframe based on multiple conditions. In the example below, I want to find indices when value in `FIELD1` = `A` and values in `FIELD3` = `0`

```julia
df = DataFrame(ID = collect(1:5), FIELD1 = ["A","B","A","C","A"], FIELD3 = [0,1,0,1,1],FIELD4 = ["One","Two","Three","Four","One"])
# with one condition I can find indices using
findall(x -> x == "A", df.FIELD1)
# with two conditions, I don't know the correct syntax 
findall((x -> (x == "A" && x == 0), (df.FIELD1, df.FIELD3)))

```

Any ideas?

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 12, 2021, 5:38pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/2 "2021-07-12T17:38:37Z")

</div>

Probably `map` would be simplest.

```julia
julia> map(df.FIELD1, df.FIELD3) do a, b
           a == "A" && b == 0
       end
5-element Vector{Bool}:
 1
 0
 1
 0
 0

```

---

<div class="post-metadata">

**Author:** ![mjanun](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@mjanun](https://discourse.julialang.org/u/mjanun)\
**Post date:** [July 12, 2021, 6:12pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/3 "2021-07-12T18:12:42Z")

</div>

Thanks. This does not return the indices or row numbers that I am after. I would like to collect row numbers as shown in my code based on one condition

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 12, 2021, 6:17pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/4 "2021-07-12T18:17:51Z")

</div>

Oh sorry. Call `findall` on the result, I suppose. Maybe someone else can chime in with a better solution.

```julia
julia> findall([false, false, true])
1-element Vector{Int64}:
 3

```

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [July 12, 2021, 6:39pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/5 "2021-07-12T18:39:41Z")

</div>

> [@pdeffebach](#):
>
> Maybe someone else can chime in with a better

It depends on what you call better but one can do:

```julia
[i for (i, (a,b)) in enumerate(zip(df.FIELD1, df.FIELD3)) if a == "A" && b == 0]

```

---

<div class="post-metadata">

**Author:** ![mjanun](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@mjanun](https://discourse.julialang.org/u/mjanun)\
**Post date:** [July 12, 2021, 7:39pm UTC](https://discourse.julialang.org/t/multiple-condition-findall-in-dataframes/64521/6 "2021-07-12T19:39:24Z")

</div>

Thank you
