基本的基本问题,但不能正确。我试图按分数排序,然后获得与最高分相关的顶级名称。
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]
然而,通过这种方法,我得到杰克而不是凯文,因为它似乎按照名称在数据框创建中出现的顺序进行。我错过的显而易见的事情是什么?
答案 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
。
答案 1 :(得分:0)
索引可以由reset_index重组。
在你的情况下,在sort_values重组索引之后执行下面。
df.reset_index(drop=True, inplace=True)
答案 2 :(得分:0)
试试这个。idxmax
df.loc[df.score.idxmax(),'name']
Out[5631]: 'kevin'