【问题标题】:Is this the Pandas equivalent of SQL Dense Rank over a Sorted Partition?这是 Pandas 相当于 SQL Dense Rank over a Sorted Partition 的吗?
【发布时间】:2020-11-11 07:47:12
【问题描述】:

我想在 Python 中复制以下 SQL 片段:

SELECT
   DENSE_RANK() OVER (PARTITION BY a0.[field1], a0.[field2] ORDER BY a0.[field3] DESC)  AS [new_field]
   ...
FROM <table>

这是我的尝试,这是等价的吗?

df["new_field"] = df.groupby(["field1", "field2"])["field3"].rank(
    method="dense", ascending=False
)

【问题讨论】:

  • 奇怪的是,您不能通过查看数据结果来回答这个问题(这是否等效?)?

标签: python sql pandas dataframe tsql


【解决方案1】:

是的,只要field3 是数字,就等价了。否则,您需要进行一些操作,例如

df['new_field'] = df.field3.rank(method='dense',ascending = False)
df['new_field'] = df.groupby(['field1','field2'])['new_field'].rank(method='dense').astype(int)

【讨论】:

  • 我今天正在测试这个,似乎得到了正确结果的倒数。您确定需要第二行上的第二个 assinging=False 吗?到目前为止,当ascending=False 就在第一行时,它得到了正确的结果。
  • 是的,你是对的@MarkMcGown,我错过了那部分,现在已修复。
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 2023-03-24
  • 2016-05-14
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多