आप ई करना पड़ सकता है अगर आपके गैर-इंडेक्स कॉलम में NaN के साथ कक्ष हैं तो rrors।
print df1
Team Year foo
0 Hawks 2001 5
1 Hawks 2004 4
2 Nets 1987 3
3 Nets 1988 6
4 Nets 2001 8
5 Nets 2000 10
6 Heat 2004 6
7 Pacers 2003 12
8 Problem 2112 NaN
print df2
Team Year foo
0 Pacers 2003 12
1 Heat 2004 6
2 Nets 1988 6
3 Problem 2112 NaN
new = df1.merge(df2,on=['Team','Year'],how='left')
print new[new.foo_y.isnull()]
Team Year foo_x foo_y
0 Hawks 2001 5 NaN
1 Hawks 2004 4 NaN
2 Nets 1987 3 NaN
4 Nets 2001 8 NaN
5 Nets 2000 10 NaN
6 Problem 2112 NaN NaN
2112 में समस्या टीम के पास किसी भी तालिका में foo के लिए कोई मूल्य नहीं है। इसलिए, यहां शामिल बाएं उस पंक्ति को झूठी वापसी करेंगे, जो डेटाफ्रेम दोनों में मेल खाता है, जैसा कि सही डेटाफ्रेम में मौजूद नहीं है।
समाधान:
मुझे क्या करना भीतरी DataFrame के लिए एक अनूठा स्तंभ जोड़ सकते हैं और सभी पंक्तियों के लिए एक मूल्य निर्धारित करने के लिए है। फिर जब आप शामिल हों, तो आप यह देखने के लिए जांच सकते हैं कि बाहरी तालिका में अद्वितीय रिकॉर्ड खोजने के लिए आंतरिक कॉलम के लिए वह कॉलम NaN है या नहीं।
df2['in_df2']='yes'
print df2
Team Year foo in_df2
0 Pacers 2003 12 yes
1 Heat 2004 6 yes
2 Nets 1988 6 yes
3 Problem 2112 NaN yes
new = df1.merge(df2,on=['Team','Year'],how='left')
print new[new.in_df2.isnull()]
Team Year foo_x foo_y in_df1 in_df2
0 Hawks 2001 5 NaN yes NaN
1 Hawks 2004 4 NaN yes NaN
2 Nets 1987 3 NaN yes NaN
4 Nets 2001 8 NaN yes NaN
5 Nets 2000 10 NaN yes NaN
एनबी। समस्या पंक्ति अब सही ढंग से फ़िल्टर की गई है, क्योंकि इसमें in_df2 का मान है।
Problem 2112 NaN NaN yes yes
कैसे = 'बाएं'? निश्चित रूप से यह नहीं है कि आप क्या चाहते हैं (आपका एसओ स्कोर दिया गया है उससे अधिक जटिल होना चाहिए) –
बाएं या दाएं विलय मुझे एक डेटा फ्रेम देता है जिसमें पंक्तियों में से एक पंक्ति में मौजूद पंक्तियां होती हैं। लेकिन मुझे एक डेटा फ्रेम की आवश्यकता है जिसमें पंक्तियां शामिल हैं जो एक डेटा फ्रेम में मौजूद हैं और किसी अन्य में मौजूद नहीं हैं। – Roman
यदि यह सिर्फ एक विलय कुंजी है तो आप इसे 'isin' और '~' –