Получение строк на основе различных значений из одного столбца

#pandas #dataframe #merge #aggregate #data-science

#питон #панды

Вопрос:

Как я могу получить строки по различным значениям в COL2 ?

Например, у меня есть фрейм данных ниже:

 COL1   COL2
a.com  22
b.com  45
c.com  34
e.com  45
f.com  56
g.com  22
h.com  45
 

Я хочу получить строки, основанные на уникальных значениях в COL2 :

 COL1  COL2
a.com 22
b.com 45
c.com 34
f.com 56
 

Итак, как я могу это получить? Я был бы очень признателен, если бы кто-нибудь мог оказать какую-либо помощь.

Ответ №1:

Используйте drop_duplicates с указанием столбца COL2 для проверки дубликатов:

 df = df.drop_duplicates('COL2')
#same as
#df = df.drop_duplicates('COL2', keep='first')
print (df)
    COL1  COL2
0  a.com    22
1  b.com    45
2  c.com    34
4  f.com    56
 

Вы также можете сохранить только последние значения:

 df = df.drop_duplicates('COL2', keep='last')
print (df)
    COL1  COL2
2  c.com    34
4  f.com    56
5  g.com    22
6  h.com    45
 

Или удалите все дубликаты:

 df = df.drop_duplicates('COL2', keep=False)
print (df)
    COL1  COL2
2  c.com    34
4  f.com    56
 

Комментарии:

1. извинения! Я отсутствовал 2 дня

2. Столкнулся с той же проблемой, решение хорошо ухудшилось, но мне нужно было сначала отсортировать данные по соответствующему столбцу, прежде чем удалять дубликаты

3. Я должен был сделать df = df.drop_duplicates(['COL2']) . Обратите внимание, что 'COL2' внутри []

Ответ №2:

Вы можете использовать groupby в сочетании с first last методами и . Чтобы получить первую строку из каждой группы:

 df.groupby('COL2', as_index=False).first()
 

Вывод:

    COL2   COL1
0    22  a.com
1    34  c.com
2    45  b.com
3    56  f.com
 

Чтобы получить последнюю строку из каждой группы:

 df.groupby('COL2', as_index=False).last()
 

Вывод:

    COL2   COL1
0    22  g.com
1    34  c.com
2    45  h.com
3    56  f.com