Если предположить, что у меня есть входной набор данных (список списков) с идентификатором, данными и значением оценки, и я хотел бы отфильтровать до самого высокого дня оценки для каждого идентификатора.Обычно в SQL я делаю это с помощью функции окна и ранга, но я не могу придумать Pythonic способ приближения к этому.
Вот нативное решение:
data = [
["123", "11/11/11", "0.5"],
["555", "12/11/11", "0.3"],
["555", "13/11/11", "0.9"],
["123", "14/11/11", "0.8"]
]
_sorted = sorted( data, key=lambda record: (record[0], record[2]), reverse=True)
output = []
last_id_seen = None
for record in _sorted:
if record[0] is last_id_seen:
continue
last_id_seen = record[0]
output.append(record)
print(output)
# output
# [['555', '13/11/11', '0.9'], ['123', '14/11/11', '0.8']]
Но эточувствует себя неуклюже, и я не знаю, насколько хорошо этот сорт будет поддерживать более сложную ситуацию.Также в идеале я бы хотел избежать решения Pandas или Numpy, так как не думаю, что они здесь нужны.
Предложения?