我有两个DataFrame
,分别是A
和B
。 B
是通过将A
的行进行混排而生成的。我想知道B
的每一行,A
中同一行的索引是什么。
示例:
A=pd.DataFrame({"a":[1,2,3],"b":[1,2,3],"c":[1,2,3]})
B=pd.DataFrame({"a":[2,3,1],"b":[2,3,1],"c":[2,3,1]})
A
a b c
0 1 1 1
1 2 2 2
2 3 3 3
B
a b c
0 2 2 2
1 3 3 3
2 1 1 1
答案应为[1,2,0]
,因为B
等于A.loc[[1,2,0]]
。我想知道如何有效地执行此操作,因为我的A
和B
很大。
答案 0 :(得分:1)
我使用Dataframe.merge
提出了可能的解决方案
A=pd.DataFrame({"a":[1,2,3],"b":[1,2,3],"c":[1,2,3]})
B=pd.DataFrame({"a":[2,3,1],"b":[2,3,1],"c":[2,3,1]})
A['index_a'] = A.index
B['index_b'] = B.index
merge_df= pd.merge(A, B, left_on=['a', 'b', 'c'], right_on=['a', 'b', 'c'])
merge_df
在哪里
a b c index_a index_b
0 1 1 1 0 2
1 2 2 2 1 0
2 3 3 3 2 1
现在,您可以引用A
或B
数据框中的行
示例
您知道在0
的索引为A
的行在2
的索引为B
的地方
注意在两个数据帧上都不匹配的行将不会显示在
中merge_df
答案 1 :(得分:1)
IIUC使用merge
pd.merge(B.reset_index(), A.reset_index(),
left_on = A.columns.tolist(),
right_on = B.columns.tolist()).iloc[:,-1].values
array([1, 2, 0], dtype=int64)