После нескольких следов и ошибок. Кажется, я получил решение. Просто создайте столбец с совокупным значением цены, а затем выберите строку с наибольшей ценой.
w1(Window.partitionBy(df_trade['stock'],df_trade['date'],df_trade['hour'],df_trade['minute']).orderBy(df_trade['second']))
df1=df[['stock', 'date','hour','minute','second','price']].withColumn('subgroup',psf.sum('price').over(w1))
df1.orderBy(['stock', 'date','hour','minute','second']).show()
# create a column named subgroup to get the cumulative value of price
w=Window.partitionBy('stock', 'date','hour','minute','second')
df3=df1.withColumn('max',psf.max('subgroup').over(w)).where(psf.col('subgroup')==psf.col('max')).drop('max')
#Get the row with largest value of cumulative price
df3=df3.orderBy(['stock', 'date','hour','minute','second'], ascending=[True, True,True,True,True]).drop('subgroup')
df3=df3.withColumnRenamed('price','lastprice') # rename
df3.show()