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

4

我需要通过按“ID”分组来选择数据框中的所有列。但是当我这样做时,我只得到了ID和“value”。我需要所有列。

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

这个查询只选择'id'和'date'列,实际上还有其他列。如何选择日期最大的所有列。


1个回答

2
在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()缺少1个必需的位置参数:'col'”的错误。 - alex3465
感谢指出,已编辑解决方案。withColumn接受两个位置参数,第一个是列名,另一个是新列的表达式。 - Ankit Kumar Namdeo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接