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