делает какую-то дичь и выводит что-то непонятно странное... !???
result = (
df.
assign(
latest=lambda x:x
.groupby("file_name")["date_time"]
.rank(method='dense')
)
.loc[lambda x: x['latest'] == 1,:]
)
result Возможно надо будет, поменять параметр, потому что точно что ты хочешь получить ты не говоришь. Все я тебе достаточно помог.
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])):
lambda не поддерживает конструкции по типу swith case. как в SQL case when then, на уровне lambda нету.
Реализуется это приблизительно многими способами.
Это общий кейс если нужно реализовать сложные булевые выражеия в моем случае они простые но ты можешь впихнуть туда сложные выражения для многих колонок.
Формально туже самую замену что я сделал можно сделать проще. replace и там словарь ключ значение. Где ключ что меняем значение на что заменяем. Но мой вариант выше позволяет организовыть сколь угодно сложные замены.