Форум сайта python.su
Помогите, пожалуйста, как выбрать строки с максимальным Значением по каждой комбинации Код и Город?
Размер датафрейма – несколько миллионов строк, поэтому скорость расчета критична.
Пример, датафрейма прикрепил.
Прикреплённый файлы:
пример.xlsx (9,6 KБ)
Офлайн
50 долларов
Офлайн
>>> import itertools >>> >>> lst = [ ... (1101, 'Москва', 0.5), ... (1101, 'Москва', 0.2), ... (1101, 'Москва', 0.1), ... (1101, 'Владимир', 0.9), ... (1101, 'Владимир', 0.2), ... (1101, 'Владимир', 0.1), ... (1101, 'Калуга', 0.8), ... (1101, 'Калуга', 0.3), ... (1101, 'Калуга', 0.2), ... (1102, 'Москва', 1), ... (1102, 'Москва', 0.8), ... (1102, 'Иваново', 1), ... (1102, 'Иваново', 0.5), ... (1102, 'Воронеж', 0.9), ... (1102, 'Воронеж', 0.8), ... (1104, 'Липецк', 0.5), ... (1104, 'Липецк', 0.4), ... (1104, 'Липецк', 0.2), ... (1104, 'Смоленск', 0.7), ... (1104, 'Смоленск', 0.6), ... (1104, 'Смоленск', 0.3), ... (1104, 'Рязань', 0.4), ... (1104, 'Рязань', 0.3), ... (1104, 'Рязань', 0.1) ... ] >>> >>> out = [] >>> it = itertools.groupby(lst, lambda i: (i[0], i[1])) >>> for i, j in it: ... out.append(max(j)) ... >>> out [(1101, 'Москва', 0.5), (1101, 'Владимир', 0.9), (1101, 'Калуга', 0.8), (1102, 'Москва', 1), (1102, 'Иваново', 1), (1102, 'Воронеж', 0.9), (1104, 'Липецк', 0.5), (1104, 'Смоленск', 0.7), (1104, 'Рязань', 0.4)] >>>
Отредактировано py.user.next (Авг. 18, 2022 14:09:27)
Офлайн
Спасибо, все получилось!
Пока не пробовал на больших данных, но надеюсь будет разумное количество времени считать.
Офлайн