Моя первая мысль (при условии, что это решение будет использоваться несколько лет, чтобы вы не могли просто группировать по месяцам) разбить дату на три столбца: месяц, день, год. Затем что-то вроде этой группы по:
df.groupby(["month", "year"]).agg({ITEM: lambda x: np.nan if is_last_day(x["day"].max(), x["month"], x["year"]) else aggregating_method(x["ITEM"]) } )
Где метод is_last_day можно было бы сделать хорошо с методами даты и времени, а метод агрегирования, однако, вы хотите агрегировать. Извините, если код не работает точно, так как я не смог его протестировать, но, надеюсь, он дает представление о мыслительном процессе. Дайте мне знать, если у вас есть какие-либо другие вопросы или я полностью неправильно понял ваш вопрос. Удачи!