【问题标题】:Rank/Row Number Window Function in PythonPython中的秩/行数窗口函数
【发布时间】:2019-06-11 17:35:50
【问题描述】:

我是 Python 新手,我需要下面这个示例的解决方案,这就是我的 df 的样子,

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

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

以下是我的结果,

有没有办法只为 ID_Number 207921021 获取一条记录(这次操作列中有两个单独的值,即“使用”和“避免”)?我在 SQL 中使用过窗口函数,即使用 QUALIFY RANK() OVER (PARTITION BY ID_number, Action ORDER BY Score_1,Score_2 DESC)=1 之前完成此操作。

Python 中是否有类似的函数可以做到这一点?

【问题讨论】:

  • 如果您想按ID_NumberAction 进行分区,那么您将获得该ID_Number 的2 条记录,因为有2 个不同的操作。你打算如何决定哪一个?您的 SQL 也会返回两行。
  • 要提取ID_Number 207921021下的哪条记录? 'Score_2' 值较高的那个?
  • 我想要'Score_2'值最高的那个@Nev1111
  • @TomNash 理想情况下,我希望使用基于最高 'Score_2' 值的操作
  • @Jude92 查看更新结果

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2016-02-28
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多