Python 按给定列表的顺序重复选择dataframe的行,并保留原始索引

Python 按给定列表的顺序重复选择dataframe的行,并保留原始索引,python,pandas,dataframe,Python,Pandas,Dataframe,在查看文档和之后,我仍然无法找到根据所有这些条件从数据帧中选择行的方法: 按给定列的值列表中给定的顺序返回行 返回重复行(与列表中的重复值关联) 保留原始索引 忽略数据帧中不存在的列表值 举个例子,让我们 df = pd.DataFrame({'A': [5, 6, 3, 4], 'B': [1, 2, 3, 5]}) df A B 0 5 1 1 6 2 2 3 3 3 4 5 让 list_of_values = [3, 4, 6

在查看文档和之后,我仍然无法找到根据所有这些条件从数据帧中选择行的方法:

  • 按给定列的值列表中给定的顺序返回行
  • 返回重复行(与列表中的重复值关联)
  • 保留原始索引
  • 忽略数据帧中不存在的列表值
举个例子,让我们

df = pd.DataFrame({'A': [5, 6, 3, 4], 'B': [1, 2, 3, 5]})
df

     A   B
0    5   1
1    6   2
2    3   3
3    4   5

list_of_values = [3, 4, 6, 4, 3, 8]
然后我想得到以下数据帧:

     A   B
2    3   3
3    4   5
1    6   2
3    4   5
2    3   3

我怎样才能做到这一点?看起来很有希望,因为它是我发现的唯一一个保留原始索引的索引,但它不适用于重复。关于如何修改/概括它有什么想法吗?

这里有一种使用
合并
的方法:

list_df = pd.DataFrame({"A": list_of_values, "order": range(len(list_of_values))})

pd.merge(list_df, df, on="A").sort_values("order").drop("order", axis=1)
输出为:

   A  B
0  3  3
2  4  5
4  6  2
3  4  5
1  3  3

我们必须先将
索引指定为一列来保留它,这样我们才能
在编码后设置索引

list_of_values = [3, 4, 6, 4, 3, 8]
df2 = pd.DataFrame({'A': list_of_values, 'order': range(len(list_of_values))})

dfn = (
    df.assign(idx=df.index)
    .merge(df2, on='A')
    .sort_values('order')
    .set_index('idx')
    .drop('order', axis=1)
)

如果要删除索引名(
idx
),请使用
rename\u axis

dfn = dfn.rename_axis(None)

   A  B
2  3  3
3  4  5
1  6  2
3  4  5
2  3  3

我有一个列缩进的问题,但看看A和B-似乎和你要找的是一样的。问题不在列中,而是在索引中。谢谢,这确实有效。至于重命名索引,我假设
dfn.index=dfn.index.rename(“”
)也可以,但它肯定更详细。
dfn = dfn.rename_axis(None)

   A  B
2  3  3
3  4  5
1  6  2
3  4  5
2  3  3