#python #pandas
#python #pandas
Вопрос:
Мой фрейм данных:
model epochs loss
0 <keras.engine.sequential.Sequential object at ... 1 0.0286867
1 <keras.engine.sequential.Sequential object at ... 1 0.0210836
2 <keras.engine.sequential.Sequential object at ... 1 0.0250625
3 <keras.engine.sequential.Sequential object at ... 1 0.109146
4 <keras.engine.sequential.Sequential object at ... 1 0.253897
Я хочу получить строку с наименьшим loss
значением.
Я пытаюсь self.models['loss'].idxmin()
, но это выдает ошибку: TypeError: reduction operation 'argmin' not allowed for this dtype
Комментарии:
1. Я не знаю, как выглядят данные, поэтому попробуйте
pd.to_numeric(self.models['loss'], errors='coerce').idxmin()
использовать это для индексации.
Ответ №1:
Есть несколько способов сделать именно это:
Рассмотрим этот пример фрейма данных
df
level beta
0 0 0.338
1 1 0.294
2 2 0.308
3 3 0.257
4 4 0.295
5 5 0.289
6 6 0.269
7 7 0.259
8 8 0.288
9 9 0.302
1) Использование условных обозначений pandas
df[df.beta == df.beta.min()] #returns pandas DataFrame object
level beta
3 3 0.257
2) Использование sort_values и выбор первого (0-го) индекса
df.sort_values(by="beta").iloc[0] #returns pandas Series object
level 3
beta 0.257
Name: 3, dtype: object
Я думаю, это наиболее читаемые методы
Редактировать :
Создал этот график, чтобы визуализировать время, затрачиваемое двумя вышеупомянутыми методами на увеличение количества строк в фрейме данных. Хотя это во многом зависит от рассматриваемого фрейма данных, sort_values значительно быстрее, чем условные выражения, когда количество строк превышает 1000 или около того.
Комментарии:
1. Какие методы самые быстрые?
Ответ №2:
self.models[self.models['loss'] == self.models['loss'].min()]
Даст вам строку с наименьшими потерями (при условии, что self.models является вашим df). добавьте .index, чтобы получить номер индекса.
Ответ №3:
Надеюсь, это сработает
import pandas as pd
df = pd.DataFrame({'epochs':[1,1,1,1,1],'loss':[0.0286867,0.0286867,0.0210836,0.0109146,0.0109146]})
out = df.loc[df['loss'].idxmin()]