重新排序数据框中的行以匹配另一个数据框中的行顺序
Reordering rows in a dataframe to match order of rows in another dataframe
我有 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
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
所以基本上我只想根据 df1["Paper ID"]
中的行顺序对 df2 中的行重新排序
由于要根据论文ID对数据帧进行排序,因此应首先将它们设置为两个数据帧中的索引:
df1.set_index('Paper ID', inplace=True)
df2.set_index('Paper ID', inplace=True)
现在您可以重新索引 df2
以匹配 df1
的顺序:
df2 = df2.reindex(df1.index)
最后,重置索引以恢复默认索引:
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
您可以使用 reindex
并使用 'Paper ID' 作为索引,这里是管道版本:
df2 = (df2.set_index('Paper ID')
.reindex(df1.set_index('Paper ID').index)
.reset_index()
)
或者,如果您的值是唯一的,您可以尝试仅使用键列(未测试)对 df1 执行左连接:
pd.merge(df1[['Paper ID']], df2,
how='left', on='Paper ID',
sort=False
)
我有 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
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
所以基本上我只想根据 df1["Paper ID"]
中的行顺序对 df2 中的行重新排序由于要根据论文ID对数据帧进行排序,因此应首先将它们设置为两个数据帧中的索引:
df1.set_index('Paper ID', inplace=True)
df2.set_index('Paper ID', inplace=True)
现在您可以重新索引 df2
以匹配 df1
的顺序:
df2 = df2.reindex(df1.index)
最后,重置索引以恢复默认索引:
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
您可以使用 reindex
并使用 'Paper ID' 作为索引,这里是管道版本:
df2 = (df2.set_index('Paper ID')
.reindex(df1.set_index('Paper ID').index)
.reset_index()
)
或者,如果您的值是唯一的,您可以尝试仅使用键列(未测试)对 df1 执行左连接:
pd.merge(df1[['Paper ID']], df2,
how='left', on='Paper ID',
sort=False
)