如何选择具有最大值的行的所有列

Posted

技术标签:

【中文标题】如何选择具有最大值的行的所有列【英文标题】:How to select all columns for rows with max value 【发布时间】:2018-09-06 14:56:32 【问题描述】:

我需要通过对“ID”进行分组来选择数据框中的所有列。但是当我这样做时,我只会得到 ID 和“价值”。我需要所有列

a=df.groupby(df['id']).agg("date": "max"
a.show()

这仅选择“id”和“日期”列。还有其他列。如何选择日期中最大值的所有列。

【问题讨论】:

GroupBy column and filter rows with maximum value in Pyspark的可能重复 【参考方案1】:

在 Spark 中,有两种方法可以将其与之前的数据框连接起来,如下所示:

a=df.groupby(df['id']).agg("date": "max"
df = df.join(
    a,
    on = "id",
    how = "inner"
)
df.show()

或者像这样使用窗口分区:

from pyspark.sql import Window
import pyspark.sql.functions as F
window = Window.partitionBy("id")
a = df.withColumn(
    "max",
    (F.max(F.col("date")).over(window))
)
a.show() 

我会说更喜欢第一个,因为即使加入后成本也更低。

【讨论】:

第二种方法TypeError: withColumn() missing 1 required positional argument: 'col' 感谢您指出,编辑解决方案。 withColumn 接受两个位置参数,首先是列的名称和新列的另一个表达式

以上是关于如何选择具有最大值的行的所有列的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 如何选择具有最大值列的行

如何选择每个项目具有最大时间戳的行集?

如何从Oracle中的另一个子查询中选择具有最大列的行

如何查询仅出现特定列中具有最高值的行的行?

SQL仅选择列上具有最大值的行[重复]

SQL仅选择列上具有最大值的行[重复]