python pandas: удалить дубликаты по столбцам A, сохраняя строку с наибольшим значением в столбце B

У меня есть dataframe с повторяющимися значениями в столбце A. Я хочу удалить дубликаты, сохраняя строку с наибольшим значением в столбце B.

Итак, это:

AB 1 10 1 20 2 30 2 40 3 10 

Должно получиться:

 AB 1 20 2 40 3 10 

Уэс добавил некоторые полезные функции, чтобы сбросить дубликаты: http://wesmckinney.com/blog/?p=340 . Но AFAICT, он предназначен для точных дубликатов, поэтому нет упоминания о критериях выбора строк.

Я предполагаю, что есть, вероятно, простой способ сделать это – может быть, так же просто, как сортировать фреймворк данных перед удалением дубликатов, но я не знаю внутренней логики groupby достаточно хорошо, чтобы понять это. Какие-либо предложения?

7 Solutions collect form web for “python pandas: удалить дубликаты по столбцам A, сохраняя строку с наибольшим значением в столбце B”

Это занимает последнее место. Не максимальный, хотя:

 In [10]: df.drop_duplicates(subset='A', keep="last") Out[10]: AB 1 1 20 3 2 40 4 3 10 

Вы также можете сделать что-то вроде:

 In [12]: df.groupby('A', group_keys=False).apply(lambda x: x.ix[xBidxmax()]) Out[12]: AB A 1 1 20 2 2 40 3 3 10 

Попробуй это:

 df.groupby(['A']).max() 

Главный ответ делает слишком много работы и выглядит очень медленным для больших наборов данных. apply медленно, и их следует избегать, если это возможно. ix устарела и ее следует избегать.

 df.sort_values('B', ascending=False).drop_duplicates('A').sort_index() AB 1 1 20 3 2 40 4 3 10 

Или просто группируйте все остальные столбцы и берете максимум необходимого столбца. df.groupby('A', as_index=False).max()

Вы можете попробовать это также

 df.drop_duplicates(subset='A', keep='last') 

Я ссылался на это с https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html

это также работает:

 a=pd.DataFrame({'A':a.groupby('A')['B'].max().index,'B':a.groupby('A') ['B'].max().values}) 

Я думаю, что в вашем случае вам действительно не нужна группа. Я бы сортировал по убыванию вашего столбца B, а затем удалял дубликаты в столбце A, и если вы хотите, у вас также может быть новый хороший и чистый индекс:

 df.sort_values('B', ascending=False).drop_duplicates('A').sort_index().reset_index(drop=True) 

Я не собираюсь дать вам весь ответ (я не думаю, что вы все равно ищете синтаксический анализ и запись в файл), но ключевой намек должен быть достаточным: использовать функцию set() python, а затем sorted() или .sort() сочетании с .reverse() :

 >>> a=sorted(set([10,60,30,10,50,20,60,50,60,10,30])) >>> a [10, 20, 30, 50, 60] >>> a.reverse() >>> a [60, 50, 30, 20, 10] 
  • Как заменить отрицательные числа в кадре данных Pandas на ноль
  • Итерация по строкам и расширение рамки данных pandas
  • Python: случайный выбор для каждой группы
  • Замените любую строку в столбцах на 1
  • Pandon pandas изменяет повторяющуюся временную метку на уникальный
  •  
    Interesting Posts for Van-Lav

    Почему эксклюзивные эксклюзивные срезы и диапазоны?

    Когда и почему я могу назначить экземпляр класса дескриптора атрибуту класса в Python, а не использовать свойство?

    WindowsError: % 1 не является допустимым приложением Win32 в Python

    Строки Python и кодирование и декодирование str ()

    Использование шагов для эффективного фильтра скользящей средней

    Дискретное трансверсальное преобразование Фурье из списка точек xy

    Как проверить, что pylab backend matplotlib работает inline?

    zipfile не может обрабатывать данные типа zip?

    Как центрировать метки в графике гистограммы

    Как запустить функцию в каждой строке в DataFrame и добавить результат в новый DataFrame

    Есть ли хороший способ избежать глубокой копии памяти или сократить время, затрачиваемое на многопроцессорную обработку?

    python – найти появление слова в файле

    Как добавить список во второй список (списки конкатенаций)

    Что означает «sys.argv»?

    Переопределение поведения по умолчанию argparse -h

    Python - лучший язык программирования в мире.