допустим, у меня есть следующий фрейм данных:
val a=Seq(("aa","b",1),("aa","c",5),("aa","d",0),("xx","y",5),("z","zz",9),("z","b",12)).toDF("name","tag","num").show
+----+---+---+
|name|tag|num|
+----+---+---+
| aa| b| 1|
| aa| c| 5|
| aa| d| 0|
| xx| y| 5|
| z| zz| 9|
| z| b| 12|
+----+---+---+
Я хочу отфильтровать этот фрейм данных так, чтобы:
для каждой группы данных (сгруппированных по имени), если у тега column есть значение 'b'. Я возьму максимальное значение столбца num, в противном случае я игнорирую строку
. Вот выход, который я хочу получить:
+----+---+---+
|name|tag|num|
+----+---+---+
| aa| c| 5|
| z| b| 12|
+----+---+---+
Пояснение
- группа строк с именем = 'aa' имеет строку, в которой значение тега == 'b', то есть I ' m принимает максимальное число num этой группы, которое составляет 5.
- группа строк с именем = 'xx' не имеет строки, в которой значение тега == 'b', таким образом, это w
- группа строк с именем = 'z' имеет строку, в которой значение тега == 'b', поэтому я беру максимальное значение num этой группы, равное 12.