वर्तमान में चयनित समाधान गलत परिणाम उत्पन्न करता है। सही ढंग से इस समस्या को हल करने के लिए हम से एक बाएँ में शामिल होने के प्रदर्शन कर सकते हैं df1
करने के लिए df2
, पहले के लिए सिर्फ अद्वितीय पंक्तियों मिल यकीन है कि करने के लिए कर रही हैdf2
।
सबसे पहले, हमें डेटा [3, 10] के साथ पंक्ति जोड़ने के लिए मूल DataFrame को संशोधित करना होगा।
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)