# How to conditionally select values in a dataframe and insert to a new column

**URL:** https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860
**Category:** New to Julia
**Tags:** dataframes
**Created:** [January 2, 2020, 2:03am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860 "2020-01-02T02:03:33Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Hmz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hmz/32/9400_2.png) [@Hmz](https://discourse.julialang.org/u/Hmz)
#### Post date: [January 2, 2020, 2:03am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/1 "2020-01-02T02:03:33Z")

</div>

Hi everyone,

I am trying to create a new dataframe column based on numeric conditions, but cannot seem to figure out the correct syntax to achieve this.

For example, to reproduce the issue

**Source df**

> ptable = DataFrame( Number = [1, 2, 6, 8, 26])

**Goal** Add a new column named new\_number with the value 7 when number \< 10, otherwise value should be be _missing_

**Current attempt**

> ptable[ptable[:Number] .\< 10, :][!, :New\_number] .= 7

While this shows 4 rows with the value 7th as an output of this command, this _does not_ create a column named new\_number in the ptable dataframe

---

<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: [January 2, 2020, 2:14am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/2 "2020-01-02T02:14:49Z")

</div>

```julia
julia> ptable.New_number = [x < 10 ? 7 : missing for x in ptable.Number]
5-element Array{Union{Missing, Int64},1}:
 7
 7
 7
 7
  missing

```

You can also use DataFramesMeta

```julia
julia> @transform(ptable, New_number = [x < 10 ? 7 : missing for x in :Number])

```

---

<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: [January 2, 2020, 2:15am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/3 "2020-01-02T02:15:44Z")

</div>

can I ask what software you are most familiar with using for data cleaning like this?

---

<div class="post-metadata">

### Author: ![Hmz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hmz/32/9400_2.png) [@Hmz](https://discourse.julialang.org/u/Hmz)
#### Post date: [January 2, 2020, 2:27am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/4 "2020-01-02T02:27:36Z")

</div>

Thanks. I am used to doing this in pandas (in python), where the equivalent syntax would be

> ptable.loc[ptable[‘Number’]\<10 , ‘New\_number’]=7

---

<div class="post-metadata">

### Author: ![Hmz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hmz/32/9400_2.png) [@Hmz](https://discourse.julialang.org/u/Hmz)
#### Post date: [January 2, 2020, 2:50am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/5 "2020-01-02T02:50:41Z")

</div>

@pdeffebach: Can this syntax be extended for checking conditions from multiple columns eg x \<10 from Number and x \<2 from Number2?

---

<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: [January 2, 2020, 2:54am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/6 "2020-01-02T02:54:17Z")

</div>

yes. for multiple columns maybe it is best to use `eachrow`

```julia
ptable.New_number = map(eachrow(df)) do r
    if r.Number < 10 || r.otherVariable > 50 
        return missing
    else
        7 
    end
end

```

Making this kind of thing work easier is definitely something DataFrames could work on.

---

<div class="post-metadata">

### Author: ![Hmz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hmz/32/9400_2.png) [@Hmz](https://discourse.julialang.org/u/Hmz)
#### Post date: [January 2, 2020, 3:00am UTC](https://discourse.julialang.org/t/how-to-conditionally-select-values-in-a-dataframe-and-insert-to-a-new-column/32860/7 "2020-01-02T03:00:36Z")

</div>

Great - thank you so much for pointing me in the right direction !
