对数据帧中的行重新排序以匹配另一个数据帧中的行顺序

Zei*_*ein 2 python pandas scikit-learn sklearn-pandas

我有 2 个数据帧 df1 和 df2,它们具有相同的行数,但顺序不同。数据帧有一个 ID 列,其中包含每行的唯一标识符,两个数据帧都有此 ID 列,这是我希望 df2 中的行顺序与 df1 中的匹配的列。我希望顺序相同的原因是数据帧将传递给 sklearn train_test_split 并且我希望以完全相同的顺序拆分数据帧。我怎样才能做到这一点?

这是第一个数据框:

df1

Paper ID          Document       Label 
math.123.txt    df1 content 1      0
math.321.txt    df1 content 2      0
math.213.txt    df1 content 3      0

df2

Paper ID         Document        Label 
math.123.txt     df2 content 1         0
math.213.txt     df2 content 2         0
math.321.txt     df2 content 3         0

Run Code Online (Sandbox Code Playgroud)

df2 所需的顺序:

df2

Paper ID         Document            Label 
math.123.txt     df2 content 1         0
math.321.txt     df2 content 3         0
math.213.txt     df2 content 2         0
Run Code Online (Sandbox Code Playgroud)

所以本质上我只想根据 df1["Paper ID"] 中的行顺序对 df2 中的行重新排序

afs*_*rov 8

由于您想根据 Paper ID 对数据帧进行排序,因此您应该首先将它们设置为两个数据帧中的索引:

df1.set_index('Paper ID', inplace=True)
df2.set_index('Paper ID', inplace=True)
Run Code Online (Sandbox Code Playgroud)

现在您可以重新索引df2以匹配以下顺序df1

df2 = df2.reindex(df1.index)
Run Code Online (Sandbox Code Playgroud)

最后,重置索引以恢复默认索引:

df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)