如何匹配两个数据帧并检索匹配的行

2024-05-08 14:42:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用pandas比较两个数据帧并检索匹配的行。我需要在两者的基础上进行比较序号如你所见,我的数据框分为三列。它不能与merge一起工作(给出一个空的数据帧)。 以下是我的示例数据帧:

    df1:
    Sr.No| ID | Translation
    1    |1   |My name is Nisa
    2    |3   |My name is Nadia
    2    |4   |My name is Madiha

    df2:
    Sr.No|ID|Translation
    1    |2 |مَالِكِ يَوْمِ الدِّينِ
    2    |3 |اهْدِنَا الصِّرَاطَ الْمُسْتَقِيم
    2    |4 |الرَّحْمَنِ الرَّحِيمِ
    3    |1 |بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ
My output should be like this:
df3:
Sr.No|ID|Translation
 2   |3 |اهْدِنَا الصِّرَاطَ الْمُسْتَقِيم
 2   |4 |الرَّحْمَنِ الرَّحِيمِ

Tags: 数据nonameid示例pandasismy
2条回答

您需要相同数据类型的列进行联接,可以通过以下方法进行检查:

print (df1[['Sr.No', 'ID']].dtypes)
print (df2[['Sr.No', 'ID']].dtypes)

然后对于所有int或所有str列:

^{pr2}$
df1[['Sr.No', 'ID']] = df1[['Sr.No', 'ID']].astype(str)
df2[['Sr.No', 'ID']] = df2[['Sr.No', 'ID']].astype(str)

合并效果非常好:

df = pd.merge(df1,df2, on=['Sr.No', 'ID'])
df1

   Sr.No  ID        Translation
0      1   1    My name is Nisa
1      2   3   My name is Nadia
2      2   4  My name is Madiha

df2

   Sr.No  ID                            Translation
0      1   2                مَالِكِ يَوْمِ الدِّينِ
1      2   3      اهْدِنَا الصِّرَاطَ الْمُسْتَقِيم
2      2   4                 الرَّحْمَنِ الرَّحِيمِ
3      3   1  بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ

^{pr2}$

请检查您的列的数据类型,确保它们与jezrael提到的相同。您可以:

df1 = df1.astype(df2.dtypes.to_dict())

如果您不想要第一个Translation,请先打drop。在

df1.drop('Translation', 1).merge(df2, on=['Sr.No', 'ID'])

   Sr.No  ID                        Translation
0      2   3  اهْدِنَا الصِّرَاطَ الْمُسْتَقِيم
1      2   4             الرَّحْمَنِ الرَّحِيمِ

相关问题 更多 >