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] 
  • Создание часового / минимального диапазона времени с использованием панд
  • Python: случайный выбор для каждой группы
  • Pandas заменяет значения
  •  
    Interesting Posts for Van-Lav

    python JSON feed возвращает строку не объект

    Twitter Python Json для CSV

    python заменяет одиночную обратную косую черту двойным обратным слэшем

    Как вычислить все последние производные (только диагональ матрицы Гессиана) в Tensorflow?

    Как сделать нелинейный комплексный поиск корней в Python

    Заменить новые строки в строке Unicode

    Как получить выход из .jar-исполнения в кодах python?

    Как я могу писать Python в чистом Python?

    Запись в базу данных MySQL с помощью pandas с использованием SQLAlchemy, to_sql

    Pandon pandas: проверьте, есть ли какое-либо значение NaN в DataFrame

    Затенение области между двумя точками на графике matplotlib

    Использование переменных в обработчике сигналов – требуется глобальное?

    Как настроить размер окна легенды matplotlib?

    Связывание значения объектов внутри функции (закрытие)

    Использование NLTK и WordNet; как преобразовать простой напряженный глагол в его нынешнюю, прошлую или прошлую форму причастия?

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