Şu anda seçili çözüm yanlış sonuçlar veriyor. Bu sorunu doğru bir şekilde çözmek df1için df2, önce sadece benzersiz satırları aldığınızdan emin olarak soldan birleştirme gerçekleştirebiliriz df2.
İlk olarak, veri içeren satırı eklemek için orijinal DataFrame'i değiştirmemiz gerekir [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
Sola birleştirme işlemini gerçekleştirin, yinelenenleri ortadan kaldırarak df2her bir satırın df1tam olarak 1 satır ile birleşmesini sağlayın df2. Parametreyi indicator, satırın hangi tablodan geldiğini gösteren ek bir sütun döndürmek için kullanın .
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
Bir boolean koşulu oluşturun:
df_all['_merge'] == 'left_only'
0 False
1 False
2 False
3 True
4 True
5 True
Name: _merge, dtype: bool
Diğer çözümler neden yanlış
Birkaç çözüm aynı hatayı yapar - sadece her bir değerin aynı satırda değil, her sütunda bağımsız olarak olup olmadığını kontrol ederler. Benzersiz ancak her iki sütundaki değerleri içeren son satırı eklemek df2hatayı ortaya çıkarır:
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
Bu çözüm aynı yanlış sonucu alır:
df1.isin(df2.to_dict('l')).all(1)