Проверьте наличие повторяющихся значений в столбце данных - PullRequest
0 голосов
/ 09 мая 2018

Есть ли способ проверить, имеют ли столбец данных дублирующиеся значения без удаления строк? У меня есть функция, которая удаляет дублирующиеся строки, однако я хочу, чтобы она запускалась только в том случае, если в конкретном столбце действительно есть дубликаты.

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

 if len(df['Student'].unique()) < len(df.index):
    # Code to remove duplicates based on Date column runs

Существует ли более простой или более эффективный способ проверки наличия дублированных значений в определенном столбце с использованием панд?

Некоторые примеры данных, с которыми я работаю (показаны только два столбца). Если найдены дубликаты, другая функция определяет, какую строку сохранить (строка с самой старой датой):

    Student Date
0   Joe     December 2017
1   James   January 2018
2   Bob     April 2018
3   Joe     December 2017
4   Jack    February 2018
5   Jack    March 2018

1 Ответ

0 голосов
/ 09 мая 2018

Вот полный пример:

import pandas as pd
import numpy as np

data = '''\
Student,Date
Joe,December 2017
James,January 2018
Bob,April 2018
Joe,December 2017
Jack,February 2018
Jack,March 2018'''

df = pd.read_csv(pd.compat.StringIO(data), sep=',')        # <--- Recreate dataframe

print(any(df['Student'].duplicated()))                     # <--- Prints True

df['Date'] = pd.to_datetime(df.Date)                       # <--- Do this to get datetime
df = df.sort_values(by='Date').drop_duplicates('Student')  # <--- Sort and drop
df['Date'] = df.Date.dt.strftime('%B %Y')                  # <--- Old date format

print(df)

Возвращает

True

  Student           Date
0     Joe  December 2017
1   James   January 2018
4    Jack  February 2018
2     Bob     April 2018

Очень часто в пандах я бы сказал, что мы заинтересованы в создании логических масок, то есть массивовВерно или неверно, что мы можем использовать, чтобы выбрать подмножество кадра.В этом случае мы могли бы, например, захотеть создать:

m = ~df['Student'].duplicated(keep='first')
# array([ True,  True,  True, False,  True, False])

~ m равно np.invert (m), который переворачивает True на False и наоборот.Очень полезно, чтобы получить без дубликатов в этом случае.Если мы теперь передадим это в фрейм данных как селектор:

df[m]

Мы получим еще раз:

  Student           Date
0     Joe  December 2017
1   James   January 2018
2     Bob     April 2018
4    Jack  February 2018

Прежде, чем я попытался изменить столбец Date на datetime.Это хорошая практика перед выполнением любого типа сортировки даты или любой операции с датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...