首页 > 解决方案 > 根据条件更改 DataFrame 行中的值

问题描述

我有一个 .csv 文件,其中有一列名为“值”

ID  Values
0   0.201915
1   0.441945
2   0.001931
3   0.221311
4   0.303101

这个 .csv 文件有 180900 行。我需要根据条件更改值,例如:

if [value] < 0.030 then [value] = 0.030 else [value] AND if [value] > 0.95 then [value] = 0.95 else [Value]

到目前为止我尝试了什么:(只检查低于 0.025 的值)

    i = 1
    for r in eachrow(df)
      global i
      if r.Values < 0.025
         r.Values = 0.025
      i =1+1
    end

有人能帮我吗?

标签: dataframejulia

解决方案


做就是了

df.Values = min.(max.(0.3, df.Values), 0.95);

这是包含您的数据的完整代码:

julia> df = CSV.read(IOBuffer("""ID  Values
              0   0.201915
              1   0.441945
              2   0.001931
              3   0.961311
              4   0.303101"""),DataFrame, delim=" ", ignorerepeated=true)
5×2 DataFrame
 Row │ ID     Values
     │ Int64  Float64
─────┼─────────────────
   1 │     0  0.201915
   2 │     1  0.441945
   3 │     2  0.001931
   4 │     3  0.961311
   5 │     4  0.303101

julia> max(3,4)
4

julia> df.Values = min.(max.(0.3, df.Values), 0.95);

julia> df
5×2 DataFrame
 Row │ ID     Values
     │ Int64  Float64
─────┼─────────────────
   1 │     0  0.3
   2 │     1  0.441945
   3 │     2  0.3
   4 │     3  0.95
   5 │     4  0.303101

正如 Bogumil 所建议的,您也可以尝试clamp速度稍快的方法:

df.Values = clamp.(df.Values, 0.3, 0.95)

推荐阅读