বর্তমানে নির্বাচিত সমাধানটি ভুল ফলাফল দেয়। সঠিকভাবে এই সমস্যা সমাধানের জন্য, আমরা থেকে একটি বাম-যোগ সম্পাদন করতে পারবেন df1করার df2, প্রথম মাত্র অনন্য সারি পেতে নিশ্চিত যার ফলে df2।
প্রথমত, আমাদের [3, 10] এর সাথে সারি যুক্ত করতে আসল ডেটাফ্রেমটি সংশোধন করতে হবে।
df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3],
'col2' : [10, 11, 12, 13, 14, 10]})
df2 = pd.DataFrame(data = {'col1' : [1, 2, 3],
'col2' : [10, 11, 12]})
df1
col1 col2
0 1 10
1 2 11
2 3 12
3 4 13
4 5 14
5 3 10
df2
col1 col2
0 1 10
1 2 11
2 3 12
বাম-যোগটি সম্পাদন করুন, ডুপ্লিকেটগুলি মুছে ফেলুন df2যাতে প্রতিটি সারি df1ঠিক 1 সারির সাথে যোগ দেয় df2। indicatorকোন অতিরিক্ত কলামটি ফিরে আসার জন্য প্যারামিটারটি ব্যবহার করুন এটি নির্দেশ করে যে সারিটি সারণিটি ছিল।
df_all = df1.merge(df2.drop_duplicates(), on=['col1','col2'],
how='left', indicator=True)
df_all
col1 col2 _merge
0 1 10 both
1 2 11 both
2 3 12 both
3 4 13 left_only
4 5 14 left_only
5 3 10 left_only
একটি বুলিয়ান শর্ত তৈরি করুন:
df_all['_merge'] == 'left_only'
0 False
1 False
2 False
3 True
4 True
5 True
Name: _merge, dtype: bool
অন্যান্য সমাধান কেন ভুল
কয়েকটি সমাধান একই ভুল করে - তারা কেবলমাত্র প্রতিটি কলামে প্রতিটি মান এক সাথে একই সারিতে নয় স্বাধীনভাবে তা যাচাই করে। শেষ সারিটি যুক্ত করা, যা অনন্য তবে এতে দুটি কলামের মান df2ভুল থেকে প্রকাশ করে:
common = df1.merge(df2,on=['col1','col2'])
(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))
0 False
1 False
2 False
3 True
4 True
5 False
dtype: bool
এই সমাধান একই ভুল ফলাফল পায়:
df1.isin(df2.to_dict('l')).all(1)