我需要使用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 |الرَّحْمَنِ الرَّحِيمِ
答案 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 الرَّحْمَنِ الرَّحِيمِ