result = (
df.
assign(latest=lambda x:x
.groupby("some_name")["date_time"]
.transform(pd.Series.nlargest, 1)
)
.loc[lambda x: x['date_time'] == x['latest'],:]
)
print(result)
В чем проблема запустить этот код. На некой категориальной переменной он выберет подсет с самыми большими датами по каждой группе. Я создал временную колонку latest последняя дата, затем сгрупировал затем трансформировал ее методом series, nlargest и оставил самую последнюю дату например мог оставить 2-3 да сколько угодно. Затем выбрал этот подсет, если временная колонка latest не нужна то ее можно дропнуть в конце. Я в целом принцип показал. вместо pd.Series.nalrgest можешь использовать приблизительно тысячу других функций или написать свою. Уж не знаю, может быть тогда и не грузить всю таблицу целиком, а сразу изначально искать нужные строки по критерию поиска силами пандаса, а потом выдавать результат? Вообщем-то вся таблица то и не нужна как бы.Ну вообще то я думал ты так и делаешь. Какой тебе смысл во всей таблице в выводе. Вывод это подсет фрейма.
for i in range(len(name)):
counter = 0
for c in range(len(name[i])):
.loc[lambda x: x['date_time'] == x['latest'],:] выбирает те строки где твоя дата равна последней дате, довольно понятно. Четко сформулируй что ты хочешь. 46 строк по количеству твоих групп. У тебя file_name содержит 46 групп. Я сейчас глянул на данные там у тебя более чем одна строка может быть (в последней дате). Если ты хочешь оставлять все значения опять таки опций много можно rank использовать например как то так
Возможно надо будет, поменять параметр, потому что точно что ты хочешь получить ты не говоришь. Все я тебе достаточно помог.