我想通过线程循环对多个数据框执行相同的操作。
数据帧的名称例如是“ 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
我在全球范围内了解该代码无法正常工作,但是我找不到正确的方法来使其正常工作。如果您有任何建议,将不胜感激。
它必须是这样的:
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] 删除。
我来说两句