我有一个由字符串索引的pandas数据帧。让我们说我的索引看起来像df.index = ['AA','AB','AC',...]
,我想访问df.loc['AC':'AE']
,效果很好。
有没有办法获得这些指数的位置,给我['AC':'AE'] => [2,3,4]
?我知道有df.index.get_loc('AC') => 2
但这只适用于单个值,而不适用于列表。
答案 0 :(得分:2)
使用:
df = pd.DataFrame({'a': [5,6,7,8, 10]}, index=['AA','AB','AC','AD','AE'])
pos = list(range(df.index.get_loc('AC'), df.index.get_loc('AE') + 1))
print (pos)
[2, 3, 4]
Index.searchsorted
的其他解决方案:
pos = list(range(df.index.searchsorted('AC'), df.index.searchsorted('AE') + 1))
print (pos)
[2, 3, 4]
a = df.index.searchsorted(['AC', 'AE'])
pos = list(range(a[0], a[1] + 1))
print (pos)
[2, 3, 4]
答案 1 :(得分:1)
您可以定义一个函数来提取整数范围:
df = pd.DataFrame(np.arange(7), index=['AA','AB','AC','AD','AE','AF','AG'])
def return_index(df, a, b):
col_map = df.index.get_loc
return np.arange(col_map(a), col_map(b)+1)
res = return_index(df, 'AC', 'AE')
print(res)
array([2, 3, 4])