如何重塑、分组和重命名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)