Как сохранить только строки, имеющие более одного значения в панде DataFrame? - PullRequest
0 голосов
/ 12 декабря 2018

Я часто пытаюсь выполнить следующую операцию, но есть непосредственное решение, которое наиболее эффективно для панд:

У меня есть следующий пример панд DataFrame, в котором есть два столбца, Name и Age:

import pandas as pd

data = [['Alex',10],['Bob',12],['Barbara',25], ['Bob',72], ['Clarke',13], ['Clarke',13], ['Destiny', 45]]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)

print(df)
      Name   Age
0     Alex  10.0
1      Bob  12.0
2  Barbara  25.0
3      Bob  72.0
4   Clarke  13.0
5   Clarke  13.0
6  Destiny  45.0

Я хотел бы удалить все строки, которые имеют совпадающее значение в Name.В примере df есть два значения Bob и два значения Clarke.Таким образом, предполагаемый результат будет:

      Name   Age
0      Bob  12.0
1      Bob  72.0
2   Clarke  13.0
3   Clarke  13.0

, поэтому я предполагаю, что существует индекс сброса.

Один из вариантов - сохранить все уникальные значения для Name в списке, а затем выполнить итерацию по фрейму данных, чтобы проверить наличие дублирующихся строк.Это было бы очень неэффективно.

Есть ли встроенная функция для этой задачи?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Использование duplicated

df[df.Name.duplicated(keep=False)]
     Name   Age
1     Bob  12.0
3     Bob  72.0
4  Clarke  13.0
5  Clarke  13.0
0 голосов
/ 12 декабря 2018

Используйте drop_duplicates и получите только те, которые отброшены:

print(df[~df['Name'].isin(df['Name'].drop_duplicates(False))])

Вывод:

     Name   Age
1     Bob  12.0
3     Bob  72.0
4  Clarke  13.0
5  Clarke  13.0

Если вам нужен индекс, выполните:

print(df[~df['Name'].isin(df['Name'].drop_duplicates(False))].reset_index(drop=1))

Вывод:

     Name   Age
0     Bob  12.0
1     Bob  72.0
2  Clarke  13.0
3  Clarke  13.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...