Hello, I’m trying to figure out how to create a 0,1 valued column in a dataframe based on comparing a dataframe column with a list. Here is an example
data = DataFrame(:index => String[], :values => Int64[])
push!(data, ["a", 1])
push!(data, ["b", 2])
push!(data, ["c", 1])
list = ["a","b"]
I’m trying to create a column called PASS which is 0,1 based on if the index column in this df contains one of the values in this list.
I’ve tried this, but this doesn’t seem to work
data.pass .= data[in.(data.index , list), :]
Any help with this?
Is this what you are looking for?
julia> data.pass = map(in(list), data.index)
3-element Vector{Bool}:
1
1
0
2 Likes
if list
is small use
transform!(data, :index => ByRow(in(list)) => :pass)
if it is large use
transform!(data, :index => ByRow(in(Set(list))) => :pass)
2 Likes
Thanks, this works! I guess it would be nice if there were a simple broadcast of the IN statement like in.(list) but I can use this. thanks.
1 Like
julia> in(list).(data[!,:index])
3-element BitVector:
1
1
0
julia> in(Set(list)).(data[!,:index])
3-element BitVector:
1
1
0
1 Like
the new column can be built like this
data.pass = in.(data.index , [list])
#or
data.repass= data.index .∈ [list]