Dataframe 在同一列中分配筛选值的结果不正确

Dataframe 在同一列中分配筛选值的结果不正确,dataframe,julia,Dataframe,Julia,我想筛选列中的值,并为筛选结果指定一个值。但是我得到了不正确的结果, 在本例中,我希望将值1指定给介于20和30之间的值,其余值为0。但我所有的值都是1。你知道为什么吗 df = DataFrame( Dict( "time" => collect(1:10), "cost" => [23,99,81,56,28,31,98,34,21,17] ) ) df.cat = missing df.c

我想筛选列中的值,并为筛选结果指定一个值。但是我得到了不正确的结果, 在本例中,我希望将值1指定给介于20和30之间的值,其余值为0。但我所有的值都是1。你知道为什么吗

df = DataFrame(
    Dict(
        "time" => collect(1:10),
        "cost" => [23,99,81,56,28,31,98,34,21,17]
    )
)

df.cat = missing
df.cat = ifelse.(df.cost .> 20 .& df.cost .< 30, 1,0)
df=DataFrame(
口述(
“时间”=>收集(1:10),
“成本”=>[23,99,81,56,28,31,98,34,21,17]
)
)
df.cat=缺失
df.cat=ifelse(df.cost.>20和df.cost.<30,1,0)
输出:


问题是需要在
df.cost.>20
df.cost.<30
部分周围加括号:

julia> df = DataFrame(
           Dict(
               "time" => collect(1:10),
               "cost" => [23,99,81,56,28,31,98,34,21,17]
           )
       );

julia> df.cat = ifelse.((df.cost .> 20) .& (df.cost .< 30), 1, 0);

julia> df
10×3 DataFrame
 Row │ cost   time   cat
     │ Int64  Int64  Int64
─────┼─────────────────────
   1 │    23      1      1
   2 │    99      2      0
   3 │    81      3      0
   4 │    56      4      0
   5 │    28      5      1
   6 │    31      6      0
   7 │    98      7      0
   8 │    34      8      0
   9 │    21      9      1
  10 │    17     10      0
julia>df=DataFrame(
口述(
“时间”=>收集(1:10),
“成本”=>[23,99,81,56,28,31,98,34,21,17]
)
);
julia>df.cat=ifelse((df.cost.>20)和(df.cost.<30),1,0);
julia>df
10×3数据帧
一行│ 成本时间猫
│ Int64 Int64 Int64
─────┼─────────────────────
1.│    23      1      1
2.│    99      2      0
3.│    81      3      0
4.│    56      4      0
5.│    28      5      1
6.│    31      6      0
7.│    98      7      0
8.│    34      8      0
9│    21      9      1
10│    17     10      0

您遇到了运算符优先级问题。这是一个修复:

df.cat = ifelse.((df.cost .> 20) .& (df.cost .< 30), 1, 0)
df.cat=ifelse.((df.cost.>20)和(df.cost.<30),1,0)
(注意条件周围的附加括号)

作为另一个注意事项,考虑将DATAFAMRES.JL升级到最新版本,因为显然您不在0.22版本,因为<代码> DF.CAT=缺失操作在2年前已经被弃用,并且目前我们更紧凑地打印数据帧以改善显示体验。