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