Julia-多个DataFrames上的线程循环

宝宝

我想通过线程循环对多个数据框执行相同的操作。

数据帧的名称例如是“ Res”和“ Delta”。这是生成它们的代码:

Res = DataFrame(Segment = ["AA","AA","BB","BB"],
                PVFP1 = [10,25,13,10],
                PVFP2 = [8,4,22,20],
                PVFP3 = [150,700,120,100],
                PVFP4 = [145,650,80,50]                
                )
Delta = DataFrame(Segment = ["AA","AA","BB","BB"],
              PVFP1 = [4,13,25,7],
              PVFP2 = [6,7,21,19],
              PVFP3 = [111,456,689,475],
              PVFP4 = [456,253,20,45]                
              )

之后,我尝试在这2个DF上传递相同的操作(实际上更多)。我想在每个DF上传递操作(如下所述),对其进行修改并将修改后的DF(及其初始名称)存储在全局范围内,以在之后使用或导出到csv。

我尝试了一些东西,但是我的语法可能太接近了,没有机会...:

numcols = names(Res, findall(x -> eltype(x) <: Union{Missing,Number}, eachcol(Res)))
table_list=(Res,Delta)

@threads for X in table_list
   X = @chain X begin
       groupby(:Segment)
       combine(numcols .=> sum, renamecols=false)
       stack(Not(:Segment))
       transform!(:variable => ByRow(x -> match(r"([^\d]+)(\d+)", x).captures) => [:Item, :Year])
       unstack([:Segment, :Item], :Year, :value, renamecols = x -> Symbol("Year", x))
   end
   return X
end

我在全球范围内了解该代码无法正常工作,但是我找不到正确的方法来使其正常工作。如果您有任何建议,将不胜感激。

BogumiłKamiński

它必须是这样的:

numcols = names(Res, findall(x -> eltype(x) <: Union{Missing,Number}, eachcol(Res)))
table_list=(Res,Delta)

results = Vector{DataFrame}(undef, length(table_list))
@threads for i in 1:length(table_list)
   results[i] = @chain table_list[i] begin
       groupby(:Segment)
       combine(numcols .=> sum, renamecols=false)
       stack(Not(:Segment))
       transform!(:variable => ByRow(x -> match(r"([^\d]+)(\d+)", x).captures) => [:Item, :Year])
       unstack([:Segment, :Item], :Year, :value, renamecols = x -> Symbol("Year", x))
   end
end

(由于您的代码无法独立运行,因此我尚未对其进行测试)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章