Удалить строки, которые имеют одинаковое значение в одной колонке в Pandas [duplicate]

from functools import reduce #python 3

>>> l = [[1,2,3],[4,5,6], [7], [8,9]]
>>> reduce(lambda x,y: x+y,l)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Метод extend() в вашем примере изменяет x вместо того, чтобы возвращать полезное значение (которое ожидает reduce()).

Более быстрый способ сделать версию reduce be

>>> import operator
>>> l = [[1,2,3],[4,5,6], [7], [8,9]]
>>> reduce(operator.concat, l)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
76
задан Abe 19 September 2012 в 16:01
поделиться

8 ответов

Это занимает последнее. Не максимальное:

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

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

In [12]: df.groupby('A', group_keys=False).apply(lambda x: x.loc[x.B.idxmax()])
Out[12]: 
   A   B
A       
1  1  20
2  2  40
3  3  10
96
ответ дан Zero 27 August 2018 в 09:39
поделиться

Я не собираюсь дать вам весь ответ (я не думаю, что вы все равно ищете синтаксический анализ и запись в файл), но ключевой намек должен быть достаточным: используйте функцию 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]
-4
ответ дан Abhranil Das 27 August 2018 в 09:39
поделиться

Когда уже заданные сообщения отвечают на вопрос, я сделал небольшое изменение, добавив имя столбца, для которого применяется функция max () для лучшей читаемости кода.

df.groupby('A', as_index=False)['B'].max()
0
ответ дан Bhagabat Behera 27 August 2018 в 09:39
поделиться

Попробуйте следующее:

df.groupby(['A']).max()
7
ответ дан eumiro 27 August 2018 в 09:39
поделиться

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

a=pd.DataFrame({'A':a.groupby('A')['B'].max().index,'B':a.groupby('A')       ['B'].max().values})
0
ответ дан Mahesh 27 August 2018 в 09:39
поделиться

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

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

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

2
ответ дан Merlin 27 August 2018 в 09:39
поделиться

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

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

   A   B
1  1  20
3  2  40
4  3  10

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

16
ответ дан Ted Petrou 27 August 2018 в 09:39
поделиться

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

df.sort_values('B', ascending=False).drop_duplicates('A').sort_index().reset_index(drop=True)
1
ответ дан whateveros 27 August 2018 в 09:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: