![](/img/trans.png)
[英]Dataframes in Python - matching multiple columns of rows between two data frames
[英]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.