Python Pyspark groupby并返回整行
我有以下名为df的数据帧:Python Pyspark groupby并返回整行,python,dataframe,pyspark-sql,Python,Dataframe,Pyspark Sql,我有以下名为df的数据帧: name score data1 data2 Name1 23 'a' 'b' Name2 2 'c' 'd' Name1 100 'b' 'f' Name3 5 'a' 'f' Name2 6 'e' 'g' Name3 500 'f' 'n' 预期结果: 查找每个名称的最大分数,并将相关
name score data1 data2
Name1 23 'a' 'b'
Name2 2 'c' 'd'
Name1 100 'b' 'f'
Name3 5 'a' 'f'
Name2 6 'e' 'g'
Name3 500 'f' 'n'
预期结果:
查找每个名称的最大分数,并将相关数据(数据1和数据2)作为dict返回:
grouped_df = df.groupby('name').agg({'score':'max'})
这将产生:
name score
Name1 100
Name2 6
Name3 500
但我最想得到的是
name score data1 data2
Name1 100 'b' 'f'
Name2 6 'e' 'g'
Name3 500 'f' 'n'
或:
我尝试加入df并按2列(name和score)对_df进行分组,但这不仅保留了max,还返回了所有列。使用数据帧是否有可接受的解决方案 您需要连接两个数据帧
joinedData = grouped_df.join(df, ['name', 'score'])
如果它返回多个具有相同名称和相同分数的行,如何使它只选择一行?我添加了.dropDuplicates()以删除重复的行,但我不知道当两行或更多行返回相同的名称和分数但不同的数据字段时,如何强制它选择一行?如何收集多个列并转换为dict?是的。如果两个名字的分数相同,则可能会出现重复
dropDuplicates('name')
是您想要的,我想。它将确保没有两行具有相同的名称。
joinedData = grouped_df.join(df, ['name', 'score'])