Основной основной вопрос, но не могу понять это правильно. Я пытаюсь отсортировать по баллам, а затем получить имя, связанное с лучшим баллом.
import pandas as pd
df = pd.DataFrame({'score' :[1,5,7,999], 'name':['jack','jill','chris','kevin']})
df.sort_values(by= 'score', ascending=False, inplace=True)
df
df.name[0]
Однако при таком подходе я получаю Джека вместо Кевина, поскольку, похоже, все происходит в порядке, указанном при создании фрейма данных. Что очевидного я пропускаю?
3 ответа
Это связано с тем, что при доступе к df.name[0]
он указывает на индекс строки (проверьте, вызвав df.index
). Значение индекса строки, в которой имя равно jack
, равно 0
, поскольку при создании df первый экземпляр был jack
.
Чтобы получить доступ к первой строке отсортированного df, используйте .iloc
для позиционной индексации (или .loc
, если вы хотите индексацию на основе меток).
import pandas as pd
df = pd.DataFrame({'score' :[1,5,7,999], 'name':['jack','jill','chris','kevin']})
df.sort_values(by= 'score', ascending=False, inplace=True)
df
df.name.iloc[0]
Это возвращает kevin
.
Индекс можно реструктурировать с помощью reset_index.
В вашем случае выполнение ниже после того, как sort_values реструктурирует индекс.
df.reset_index(drop=True, inplace=True)
Попробуйте это .using idxmax
df.loc[df.score.idxmax(),'name']
Out[5631]: 'kevin'
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.