DataFrame实现sql中row_number() over(partition by column_1 order by column_2)

如何在 DataFrame实现sql中row_number() over(partition by column_1 order by column_2)呢,语句怎么写?数据框如下,想按p1进行分组后,然后通过data进行排序(降序),最后取出 排序号为1数据集

using DataFrames
julia> df=DataFrame(p1=[“a1”,“a2”,“a1”,“b1”,“b2”],p2=[“c1”,“d1”,“c1”,“c2”,“d2”],data=[10,100,20,30,300])
5×3 DataFrame
Row │ p1 p2 data
│ String String Int64
─────┼───────────────────────
1 │ a1 c1 10
2 │ a2 d1 100
3 │ a1 c1 20
4 │ b1 c2 30
5 │ b2 d2 300


显示效果:
k1 k2 data row_number
0 a1 c1 20 1.0
1 a1 c1 10 2.0 → 这一行将会被移走
2 a2 d1 100 1.0
3 b1 c2 30 1.0
4 b2 d2 300 1.0

处理完成后显示:
k1 k2 data
0 a1 c1 20
1 a2 d1 100
2 b1 c2 30
3 b2 d2 300

只取每组升序第一个的话,建议不要用sql的方式想问题,这个实际需要做的是取各分组里data列的min。

好的,受教了,感谢!

这有几个思路:
思路 1: 排序 - 分组 - 第一个值 or 最后一个值

sort!(df, [:data])
combine(groupby(df, [:p1]), first)
思路 2:分组 - Combine - 最大值
combine(groupby(df, [:p1, :p2]), :data => maximum => :data)

一般而言,第二种是更符合 DataFrame 操作逻辑的。