Python 根据原始数据帧对行重新排序

Python 根据原始数据帧对行重新排序,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个数据帧A和B。B是A的副本。我对B做了一些操作,现在它们的结构都相同,只是B的所有行都按列“title”排序,例如:title0,title1…,而A的列“title”没有顺序,例如:title24,title13。。。。我想让B像A中的标题一样重新排列。我试图列出A的标题列,并对B进行了重新索引,这很管用,但后来我的标题列变成了B的索引列,这是我不想要的。任何帮助都将不胜感激。多谢各位 代码: 从图中可以看出,我希望B像A一样重新排列。让我们试试看 B = B.iloc[B.titl

我有两个数据帧A和B。B是A的副本。我对B做了一些操作,现在它们的结构都相同,只是B的所有行都按列“title”排序,例如:title0,title1…,而A的列“title”没有顺序,例如:title24,title13。。。。我想让B像A中的标题一样重新排列。我试图列出A的标题列,并对B进行了重新索引,这很管用,但后来我的标题列变成了B的索引列,这是我不想要的。任何帮助都将不胜感激。多谢各位

代码:

从图中可以看出,我希望B像A一样重新排列。

让我们试试看

B = B.iloc[B.title.map(dict(zip(A.title,range(len(A)))))]

B
   title col2
0  tit12    i
2  tit22    g
1  tit21    h
8  tit45    a
6  tit41    c
7  tit42    b
4  tit33    e
3  tit32    f
5  tit36    d
或者我们尝试
pd.category

B = B.iloc[pd.Categorical(B.title,A.title.unique()).argsort()]
   title col2
0  tit12    i
2  tit22    g
1  tit21    h
7  tit42    b
6  tit41    c
8  tit45    a
4  tit33    e
5  tit36    d
3  tit32    f

您可以将两个数据帧的索引设置为“title”,用
A
重新索引
B
,使用-您也可以使用普通-然后重置索引:

B.set_index("title").reindex_like(A.set_index("title")).reset_index()


   title    col2
0   tit12   i
1   tit22   g
2   tit21   h
3   tit42   b
4   tit41   c
5   tit45   a
6   tit33   e
7   tit36   d
8   tit32   f
您还可以使用
合并

pd.merge(B, A["title"], how="right")

   title    col2
0   tit12   i
1   tit22   g
2   tit21   h
3   tit42   b
4   tit41   c
5   tit45   a
6   tit33   e
7   tit36   d
8   tit32   f
如果你想要索引,类似于@BENY接受的答案,你可以组合,如果你的索引是唯一的,你可以使用:


如您所知,为了有效地回答问题,我们需要查看一些示例数据和预期输出。请您提供缺少的详细信息。您是否尝试过A.sort\u values('title')
?您好,我已经更新了问题,我不能使用sort,因为它将执行升序或降序,我希望按A的顺序排列行。
pd.merge(B, A["title"], how="right")

   title    col2
0   tit12   i
1   tit22   g
2   tit21   h
3   tit42   b
4   tit41   c
5   tit45   a
6   tit33   e
7   tit36   d
8   tit32   f
B.take(pd.Index(A.title).get_indexer_for(B.title))

    title   col2
0   tit12   i
2   tit22   g
1   tit21   h
8   tit45   a
6   tit41   c
7   tit42   b
4   tit33   e
3   tit32   f
5   tit36   d