Как получить последнее значение с помощью dropDuplicates ()? - PullRequest
1 голос
/ 10 мая 2019

Допустим, у меня есть следующий искровой фрейм данных (df):

enter image description here

Как видно, в «метке времени» есть дублирующиеся значениястолбец, и я хочу избавиться от них, оставляя строки, где 'Timestamp' имеет уникальные значения.

Я попытался удалить дубликаты с помощью этой строки кода:

df.dropDuplicates(['Timestamp'])

КажетсяdropDuplicates() сохраняет первую строку в дублированных строках, но мне нужно иметь последнюю строку в дубликате (те, которые выделены в таблице).Как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Существует обходной путь с использованием groupBy и last. Мы можем сделать его универсальным, определив агрегатор last для каждого столбца, но Timestamp.

// let's define the aggregators
val aggs = df.columns
    .filter(_ != "Timestamp")
    .map(c => last(col(c)) as c)
// And use them:
val result = df
    .groupBy("Timestamp")
    .agg(aggs.head, aggs.tail :_*)
1 голос
/ 10 мая 2019

@ Оли предложил хорошее решение, которое я использовал следующим образом (используя python):

exprs = [last(x).alias(x) for x in df.columns if x != 'Timestamp']
df0 = df.groupBy("Timestamp").agg(*exprs)

Надеюсь, что это поможет людям, которые могут получить подобную проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...