如何重塑、分组和重命名Julia dataframe?
我有以下数据帧:如何重塑、分组和重命名Julia dataframe?,dataframe,julia,reshape,Dataframe,Julia,Reshape,我有以下数据帧: Police Product PV1 PV2 PV3 PM1 PM2 PM3 0 1 AA 10 8 14 150 145 140 1 2 AB 25 4 7 700 650 620 2 3 AA 13 22 5 120 80 60 3 4 AA 12 6 12 250 1
Police Product PV1 PV2 PV3 PM1 PM2 PM3
0 1 AA 10 8 14 150 145 140
1 2 AB 25 4 7 700 650 620
2 3 AA 13 22 5 120 80 60
3 4 AA 12 6 12 250 170 120
4 5 AB 10 13 5 500 430 350
5 6 BC 7 21 12 1200 1000 900
PV1是第1年的项目PV,第2年的项目PV2。。。。
我想结合重塑和分组操作+一些重命名的东西来获得以下DF:
Product Item Year1 Year2 Year3
0 AA PV 35 36 31
1 AA PM 520 395 320
2 AB PV 35 17 12
3 AB PM 1200 1080 970
4 BC PV 7 21 12
5 BC PM 1200 1000 900
它对产品名称进行分组操作,并重新设置DF,以将项目作为一列传递,并将每个项目的总和放入新的列中
我找到了一种用Python实现的方法,但我现在正在寻找一种用Julia传递代码的解决方案。
groupby操作没有问题,但我对重塑/重命名零件有更多问题
如果你有任何想法,我将非常感激
谢谢你的帮助
编辑:
按照您的建议,我已经安装了Julia 1.5并将DataFrames pkg更新为0.22版本。因此,代码运行良好。剩下的唯一问题是关于我的真实DF中列名的非常量长度,这使得代码的转换部分不完全合适。我将搜索一种使用正则表达式拆分char/num的方法
非常感谢您抽出时间,并对编辑中的错误表示歉意。可能有几种方法可以做到这一点。下面是一个使用内置函数的示例(同时还利用了几个高级功能,因此如果您对代码有任何疑问,请评论,我可以解释): 我使用Chain.jl只是为了说明如何在实践中使用它(但当然不需要) 您可以在处理的任何阶段之后添加
@aside show(41;
注释,以查看处理步骤的结果
编辑:
这是您需要的正则表达式吗(先拆分非数字字符,再拆分数字字符)
然后写下:
ByRow(x -> match(r"([^\d]+)(\d+)", x).captures)
随着您的转变THK等待您的快速回答。我在你文章的末尾分享了我的反馈。请用反馈编辑你的文章,以便清楚地将问题和答案分开。另外,在测试我的代码之前,请将DataFrames.jl更新到其当前版本0.22。从您的评论中,我可以看出您正在使用DataFrames.jl的旧版本。关于将名称分为两部分,从字符串中选择任何内容的一般方法是使用正则表达式。对于这些错误,我深表歉意。我编辑了我的帖子。ThksI用一个示例正则表达式编辑了我的答案。事实上,这正是我想要的。再次感谢。
julia> match(r"([^\d]+)(\d+)", "fsdfds123").captures
2-element Array{Union{Nothing, SubString{String}},1}:
"fsdfds"
"123"
ByRow(x -> match(r"([^\d]+)(\d+)", x).captures)