Поскольку 20 000 строк не являются «большим» набором данных, вы можете обойтись относительно простым методом, используя операции группировки и установки:
def has_dates(x, dates={2016, 2017, 2018}):
return dates.issubset(set(x))
grouped = dataset.groupby('ID_NUMBER')
mask = grouped.DATE.unique().apply(has_dates)
print(mask[mask].index.values)
Здесь мы группируем данные по ID_NUMBER
, чтобы получить сгруппированные кадры для каждого идентификатора, а затем проверить, является ли желаемый dates
, который вы ищете, подмножеством уникальных дат, связанных с этим конкретным индексом.
mask
- это логическая серия, которая равна True
для идентификаторов, соответствующих вашему условию, поэтому вы можете получить его значения индекса, чтобы просмотреть все идентификаторы, которые вас интересуют, или, альтернативно, используйте dataset.loc[mask[mask].index]
для извлечения строк из вашего набора данных.