2016-07-07 17 views
7

मैं दो डेटाफ्रेम में एक ही नाम के कॉलम के बीच अंतर कैसे चुन सकता हूं? मेरा मतलब है कि मेरे पास डेटा नाम ए है और एक्स नामक कॉलम के साथ डेटा नाम बी है, यदि मैं pd.merge(A, B, on=['X']) करता हूं, तो मुझे ए और बी के सामान्य एक्स मान मिलेंगे, लेकिन मैं "गैर-आम" कैसे प्राप्त कर सकता हूं ?पांडा (पायथन) में "एंटी-मर्ज"

+1

आप केवल ~ ~ ए ['एक्स'] कर सकते हैं। Isin (बी ['एक्स']) 'ए के लिए अद्वितीय मानों को देखने के लिए और विपरीत – EdChum

+0

विपरीत करने के विपरीत रिवर्स भी मुझे लगता है कि' pd.merge (ए, बी, ऑन = ['एक्स'], सूचक = सही, कैसे = 'बाहरी') 'काम करेगा' के रूप में काम करेगा '_merge' col' और इसमें मूल्यों को 'left_only',' right_only' होगा, यह इंगित करने के लिए कि क्या मान केवल बाएं/दाएं हैं – EdChum

उत्तर

14

आप how='outer' और indicator=True को मर्ज प्रकार बदलते हैं, तो यह एक स्तंभ जोड़ देगा आपको बताने के लिए कि क्या मान छोड़ दिया जाता है/दोनों/सही केवल:

In [2]: 
A = pd.DataFrame({'x':np.arange(5)}) 
B = pd.DataFrame({'x':np.arange(3,8)}) 
print(A) 
print(B) 
    x 
0 0 
1 1 
2 2 
3 3 
4 4 
    x 
0 3 
1 4 
2 5 
3 6 
4 7 

In [3]: 
pd.merge(A,B, how='outer', indicator=True) 

Out[3]: 
    x  _merge 
0 0.0 left_only 
1 1.0 left_only 
2 2.0 left_only 
3 3.0  both 
4 4.0  both 
5 5.0 right_only 
6 6.0 right_only 
7 7.0 right_only 

फिर आप परिणामी पर df विलय कर दिया फ़िल्टर कर सकते हैं _merge col:

In [4]: 
merged = pd.merge(A,B, how='outer', indicator=True) 
merged[merged['_merge'] == 'left_only'] 

Out[4]: 
    x  _merge 
0 0.0 left_only 
1 1.0 left_only 
2 2.0 left_only 

तुम भी isin का उपयोग करें और मुखौटा नकारना सकता मूल्यों बी में नहीं लगता है:

In [5]: 
A[~A['x'].isin(B['x'])] 

Out[5]: 
    x 
0 0 
1 1 
2 2 
संबंधित मुद्दे