Julia DataFrame 多值过滤

标签 julia syntactic-sugar

在以下情况下,有两种过滤 DataFrame 的方法:

1. df = df[((df[:field].==1) | (df[:field].==2)), :]
2. df = df[[in(v, [1, 2]) for v in df[:field]], :]

第二种方法较慢,但适用于条件中的可变值集。
有没有我错过的语法糖,所以我可以像第一种方式一样快地得到它,但有一些 in - 类似建筑?

最佳答案

julia> using DataFrames

findin function could be another way to do the task:


julia> function t_findin(df::DataFrames.DataFrame)
        df[findin(df[:A],[1,2]), :]
       end
t3 (generic function with 1 method)

array comprehensions:


julia> function t_compr(df::DataFrames.DataFrame)
        df[[in(v, [1, 2]) for v in df[:A]], :]
       end
t1 (generic function with 1 method)

multiple conditionds:


julia> function t_mconds(df::DataFrames.DataFrame)
        df[((df[:A].==1) | (df[:A].==2)), :]
       end
t2 (generic function with 1 method)

测试数据
julia> df[:B] = rand(1:30,10_000_000);
julia> df[:A] = rand(1:30,10_000_000);

测试结果
julia> @time t_findin(df);
  0.489064 seconds (67 allocations: 19.340 MB, 0.49% gc time)

julia> @time t_mconds(df);
  0.222389 seconds (106 allocations: 78.933 MB, 5.98% gc time)

julia> @time t_compr(df);
 23.634846 seconds (100.00 M allocations: 2.563 GB, 1.47% gc time)

关于Julia DataFrame 多值过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834158/

相关文章:

C++:一种在分隔变量定义和测试的 if 语句中声明一个变量(或多个变量)的方法?

python - 将@property 方法添加到类

julia - Julia函数内部的函数

machine-learning - 错误:在Julia中使用Flux的“DimensionMismatch(”矩阵A的尺寸为(1024,10),向量B的长度为9”)

c++ - 没有命名类类型的方法函数指针模板

c++ - 如何在 C++ 中使用字符串文字初始化动态字符数组?

scala - 用于理解的模式匹配分配如何转化为 monadic 操作?

Julia 程序,执行过程

types - 在 Julia 中键入 kwargs

Julia libllvm_system 未定义