在查看here和here之后,在文档中,我仍然找不到一种方法来根据 all 这些条件从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, 4, 3, 8]
然后我想获取以下数据框:
A B
2 3 3
3 4 5
1 6 2
3 4 5
2 3 3
我该怎么做? Zero's answer看起来很有希望,因为它是我发现的唯一保留原始索引的索引,但它不适用于重复项。关于如何修改/概括它的任何想法?
答案 0 :(得分:1)
这是一种使用merge
来做到这一点的方法:
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
答案 1 :(得分:1)
我们必须通过首先将index
分配为一列来保留它,以便在合并后可以set_index
:
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)
)
A B
idx
2 3 3
3 4 5
1 6 2
3 4 5
2 3 3
如果要删除索引名称(idx
),请使用rename_axis
:
dfn = dfn.rename_axis(None)
A B
2 3 3
3 4 5
1 6 2
3 4 5
2 3 3