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

时间:2017-10-22 13:01:35

标签: python pandas join dataframe rows

我需要使用pandas比较两个数据帧并检索匹配的行。我需要在Sr.No和ID的基础上进行比较。您可以看到我的数据框分为三列。它不兼容合并(给出一个空的数据帧)。 这是我的示例数据帧:

    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 |الرَّحْمَنِ الرَّحِيمِ

2 个答案:

答案 0 :(得分:2)

您需要相同的dtypes列进行连接,您可以通过以下方式进行检查:

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

然后是所有int或所有str列:

df1[['Sr.No', 'ID']] = df1[['Sr.No', 'ID']].astype(int)
df2[['Sr.No', 'ID']] = df2[['Sr.No', 'ID']].astype(int)
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'])

答案 1 :(得分:2)

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  بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ
df1.merge(df2, on=['Sr.No', 'ID'])

   Sr.No  ID      Translation_x                      Translation_y
0      2   3   My name is Nadia  اهْدِنَا الصِّرَاطَ الْمُسْتَقِيم
1      2   4  My name is Madiha             الرَّحْمَنِ الرَّحِيمِ

请检查列的数据类型,并确保它们是相同的,如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             الرَّحْمَنِ الرَّحِيمِ