我是Python的新手,我需要以下示例的解决方案,这就是我的df的外观,
我只需要返回两条记录,一条记录ID_Number 207921021,一条记录ID_Number222037001。使用下面的代码,当动作相同时,我可以根据成绩1和成绩2的最大值获得一条记录ID_Number 222037001。 (在这种情况下为“投资”)
Data=Data.groupby(['ID_Number','Action'])['Score_1','Score_2'].max().reset_index()
下面是我的结果,
是否还有办法只获取ID_Number 207921021的一条记录(这次在action列中有两个单独的值,即“ Use”和“ Avoid”)?我已经在SQL中使用了窗口函数,即使用QUALIFY RANK() OVER (PARTITION BY ID_number, Action ORDER BY Score_1,Score_2 DESC)=1
来完成此操作。
Python中有类似的功能可以做到这一点吗?
答案 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