繁体   English   中英

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

[英]how to match two data frames and retrieve matching rows

我需要使用熊猫比较两个数据框并检索匹配的行。 我需要根据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 |الرَّحْمَنِ الرَّحِيمِ

您需要相同的列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'])
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             الرَّحْمَنِ الرَّحِيمِ

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM