У меня есть файл с одной строкой на EMID на дату вступления в силу.Мне нужно найти максимальную дату вступления в силу для EMID, которая произошла до определенной даты.Например, если EMID = 1 имеет 4 строки, одну для 1/1/16, одну для 10/1/16, одну для 12/1/16 и одну для 12/2/17, и я выбираю дату 1/ 1/17 как моя конкретная дата, я бы хотел знать, что 01.12.16 является максимальной датой для EMID = 1, которая произошла до 01.01.17.
Я знаю, как найти максимальную дату в целом по EMID (groupby.max ()).Я также могу отфильтровать файл по датам до 01.01.17 и найти максимум оставшихся строк.Однако, в конечном счете, мне нужна последняя строка до 01.01.17, а затем все строки после 1/1/17, поэтому фильтрация строк после даты не оптимальна, потому что тогда мне приходится делать сложные объединениячтобы вернуть их обратно.
# Create dummy data
dummy = pd.DataFrame(columns=['EmID', 'EffectiveDate'])
dummy['EmID'] = [random.randint(1, 10000) for x in range(49999)]
dummy['EffectiveDate'] = [np.random.choice(pd.date_range(datetime.datetime(2016,1,1), datetime.datetime(2018,1,3))) for i in range(49999)]
#Create group by
g = dummy.groupby('EmID')['EffectiveDate']
# This doesn't work, but effectively shows what I'm trying to do
dummy['max_prestart'] = max(dt for dt in g if dt < datetime(2017,1,1))
Я ожидаю, что вывод будет дополнительным столбцом в моем фрейме данных с максимальной датой, которая произошла до указанной даты.