বর্তমানে নির্বাচিত সমাধানটি ভুল ফলাফল দেয়। সঠিকভাবে এই সমস্যা সমাধানের জন্য, আমরা থেকে একটি বাম-যোগ সম্পাদন করতে পারবেন 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)