如何在pandas.Series中获取第i项的索引

D3V*_*LPR 11 python series dataframe pandas

我正试图获得我所拥有的系列中第6项的索引.

这就是头部的样子

United States    1.536434e+13
China            6.348609e+12
Japan            5.542208e+12
Germany          3.493025e+12
France           2.681725e+12
Run Code Online (Sandbox Code Playgroud)

为获得第6个索引名称(排序后的第6个国家/地区),我通常使用s.head(6)并从那里获得第6个索引

s.head(6)给了我

United States     1.536434e+13
China             6.348609e+12
Japan             5.542208e+12
Germany           3.493025e+12
France            2.681725e+12
United Kingdom    2.487907e+12
Run Code Online (Sandbox Code Playgroud)

看着这个,我得到的指数是英国.

那么,有没有更好的方法来获得除此之外的索引.而且,对于数据框,是否有任何函数在排序后根据相应的列获得第6个索引.

如果它是数据框,我通常排序,创建一个名为index的新列,并使用reset_index,然后使用iloc属性获得第6个(因为,它将在重置后使用索引中的范围).

有没有更好的方法使用pd.Series和pd.DataFrame执行此操作.

谢谢.

piR*_*red 25

你可以直接从索引中得到它

s.index[5]
Run Code Online (Sandbox Code Playgroud)

要么

s.index.values[5]
Run Code Online (Sandbox Code Playgroud)

这一切都取决于你的考虑better.我可以告诉你,一种numpy方法可能会更快.

例如. numpy.argsort返回一个数组,其中数组中的第一个元素是要排序的数组中应该是第一个的位置.argsort返回数组中的第二个元素是要排序的数组中元素的位置,应该是第二个.等等等等.

因此,您可以执行此操作以在排序后获取第6个项目的索引值.

s.index.values[s.values.argsort()[5]]
Run Code Online (Sandbox Code Playgroud)

或者更透明

s.sort_values().index[5]
Run Code Online (Sandbox Code Playgroud)

或者更有创意

s.nsmallest(6).idxmax()
Run Code Online (Sandbox Code Playgroud)