如何选择具有最大值的行的所有列
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 接受两个位置参数,首先是列的名称和新列的另一个表达式以上是关于如何选择具有最大值的行的所有列的主要内容,如果未能解决你的问题,请参考以下文章