Python中的排名/行数窗口功能

时间:2019-06-11 17:35:50

标签: python python-3.x pandas jupyter-notebook

我是Python的新手,我需要以下示例的解决方案,这就是我的df的外观,

enter image description here

我只需要返回两条记录,一条记录ID_Number 207921021,一条记录ID_Number222037001。使用下面的代码,当动作相同时,我可以根据成绩1和成绩2的最大值获得一条记录ID_Number 222037001。 (在这种情况下为“投资”)

Data=Data.groupby(['ID_Number','Action'])['Score_1','Score_2'].max().reset_index()

下面是我的结果,

enter image description here

是否还有办法只获取ID_Number 207921021的一条记录(这次在action列中有两个单独的值,即“ Use”和“ Avoid”)?我已经在SQL中使用了窗口函数,即使用QUALIFY RANK() OVER (PARTITION BY ID_number, Action ORDER BY Score_1,Score_2 DESC)=1来完成此操作。

Python中有类似的功能可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

这将根据您定义的排序,在每个ID_Number中选择一行。

df.sort_values(by=['Score_2', 'Score_1'], ascending=[False, True]).groupby(['ID_Number']).head(1)

输出:

    Action  ID_Number   Score_1     Score_2
3   Invest  222037001   9   0.4600
0   Use     207821021   7   0.4525