Python 在使用isin()时,如何维护原始数据帧索引并保持输入列表的顺序?

Python 在使用isin()时,如何维护原始数据帧索引并保持输入列表的顺序?,python,pandas,indexing,Python,Pandas,Indexing,我有以下数据帧: g=pd.DataFrame({'A':[1,2,42,5,7],'B':[5,6,7,3,2]}) am使用以下列表筛选数据帧: list_values = [5,7,1] 并使用以下命令获得以下输出: indexes = g[g['A'].isin(list_values)].index.values 输出 array([0, 3, 4], dtype=int64) 如何更改代码,使索引如下所示 array([3, 4, 0], dtype=int64) 本质上,我

我有以下数据帧:
g=pd.DataFrame({'A':[1,2,42,5,7],'B':[5,6,7,3,2]})

am使用以下列表筛选数据帧:

list_values = [5,7,1]
并使用以下命令获得以下输出:

indexes = g[g['A'].isin(list_values)].index.values
输出

array([0, 3, 4], dtype=int64)
如何更改代码,使索引如下所示

array([3, 4, 0], dtype=int64)
本质上,我正在寻找一种方法,用一个列表过滤DF,并按照过滤器列表的顺序返回原始索引值

谢谢

我看了这个,但没有找到我想要的:

您可以使用ordered
CategoricalDtype
强制执行自定义排序顺序。排序后,返回5、7、1的所有索引

import pandas as pd

my_cat = pd.CategoricalDtype(categories=list_values, ordered=True)
#CategoricalDtype(categories=[5, 7, 1], ordered=True)

g.loc[g['A'].isin(list_values), 'A'].astype(my_cat).sort_values().index
#Int64Index([3, 4, 0], dtype='int64')

@阿洛兹-我想那没关系。重要的是保持不丢失原始索引值,并以与列表值相同的顺序返回列表。
np.array([g.loc[g.a==i]。列表值中i的索引[0])
仅当“a”中的值是唯一的并且列表中的所有元素都存在于“a”中时才起作用。@Asettisriharsha,谢谢我尝试了此操作,但得到了
属性错误:模块“pandas”没有属性“CategoricalDtype”
您使用的是哪个版本?@DavidCollins 0.25.0。我很确定它是从一个相当旧的版本开始存在的,比如
0.21.0
。太好了,谢谢!我用的是0.20.3。从未看到更新的理由。现在我做到了,而且做到了:1.0.1
import pandas as pd

my_cat = pd.CategoricalDtype(categories=list_values, ordered=True)
#CategoricalDtype(categories=[5, 7, 1], ordered=True)

g.loc[g['A'].isin(list_values), 'A'].astype(my_cat).sort_values().index
#Int64Index([3, 4, 0], dtype='int64')