【发布时间】:2020-10-07 18:45:31
【问题描述】:
我想将 Window 函数应用于 DataFrame 以仅获取每个 Id 的最新指标。对于以下数据,我希望 df 在应用 Window 函数后仅包含前两条记录。
| id | metric | transaction_date |
| 1 | 0.5 | 05-10-2019 |
| 2 | 15.9 | 07-22-2020 |
| 2 | 4.7 | 11-03-2017 |
使用row_number排名功能是否正确?我当前的实现如下所示:
df.withColumn(
"_row_number",
F.row_number().over(
Window.partitionBy("id").orderBy(F.desc("transaction_date")))
)
.filter(F.col("_row_number") == 1)
.drop("_row_number")
【问题讨论】:
-
df.sort_values(by='transaction_date').groupby(by='id').head(-1)这对你有用吗? -
我认为
.head(-1)只会给你一行。.first()将给出每个 groupby 的第一行。 -
这看起来不错,可以满足您的需求。为什么你认为这不是正确的做法?
标签: python python-3.x dataframe pyspark apache-spark-sql