मेरे पास दो डेटा फ्रेम हैं, एक का नाम 'फू' और एक का नाम 'बार' है। मेरे डेटाफ़्रेम 'फू' में कुछ अद्वितीय स्तंभ हैं और मेरे डेटाफ़्रेम 'बार' में कुछ अद्वितीय स्तंभ भी हैं। हालांकि, वे दोनों एक कॉलम साझा करते हैं, कॉलम 'google'। मैं यह देखने की कोशिश कर रहा हूं कि डेटा फ्रेम 1, 'फू' में सभी कॉलम रखने का कोई तरीका है, और एक अतिरिक्त कॉलम, कॉलम 'सीएलआरएस' जोड़ें, जो कॉलम 'google' की सामग्री में 1 होगा। 'फू' की पंक्ति 'बार' में 'गूगल' कॉलम में कहीं दिखाई देती है।

अधिक विशेष रूप से, मान लें कि मेरे पास डेटाफ्रेम इस तरह संरचित हैं: 'foo' में कॉलम हैं: 'foo_1', 'foo_2', ..., 'google' और bar में कॉलम हैं: 'bar_1', 'bar_2, .. ।, 'गूगल'। मैं 'फू' और 'बार' में इस तरह शामिल/विलय करना चाहता हूं कि 'फू' में एक अतिरिक्त कॉलम, 'सीएलआरएस' हो, जैसे कि 'सीएलआरएस' में 1 हो, अगर 'गूगल' की सामग्री ' foo' 'बार' के 'google' कॉलम में किसी बिंदु पर दिखाई देते हैं। मैंने निम्नलिखित कोड की कोशिश की है:

      '''
         # foo examples
         foo['foo1'] = ['dijkstra','TSP',...]
         foo['foo2'] = ['Oculus','VR', ...]
         .
         .
         .
         foo['google'] = ['search','ads', 'A/B Testing', 'UI' ...]

         # bar examples
         bar['bar1'] = ['dijkstra','TSP',...]
         bar['bar2'] = ['search','ads', ...]
         .
         .
         .
         # 'A/B Testing' appears in the column somewhere but 'ads' does 
         # not
         bar['google'] = ['search','google_search', 'TDD', 'UI', 
         ...,'A/B Testing', ...]

         # my code
         foo_merged = 
                    foo.join(bar, how = 'left')

         # my result 
         foo_merged['foo1'] = ['dijkstra','TSP',...]
         foo_merged['foo2'] = ['search','ads', ...]
         .
         .
         .
         foo_merged['google'] = ['search','ads', ...]
         foo_merged['CLRS']   = ['search','google_search', 'TDD', 'UI', 
         ...]

         # What I want as an output for foo_merged is:
         foo_merged['foo1'] = ['dijkstra','TSP',...]
         foo_merged['foo2'] = ['search','ads', ...]
         .
         .
         .
         foo_merged['google'] = ['search','ads', 'A/B Testing', 'UI' 
         ...]
         foo_merged['CLRS']   = [1,0,1,1,...]
      '''

दुर्भाग्य से, पिछले जॉइन कोड को चलाने के बाद, foo_merged में foo के सभी कॉलम और एक अतिरिक्त कॉलम होता है जिसमें हमेशा 'बार' से कॉलम 'google' की सामग्री होती है। इसके बजाय मेरा वांछित परिणाम एक डीएफ होगा जैसे कि अतिरिक्त कॉलम 'सीएलआरएस' में 1 होता है यदि 'फू' की उस पंक्ति में 'गूगल' की सामग्री कहीं 'बार' में कॉलम 'गूगल' की सामग्री के रूप में दिखाई देती है और 0 अन्यथा .

0
Nikolas Papastavrou 26 जून 2019, 00:06

1 उत्तर

सबसे बढ़िया उत्तर

मेरा मानना ​​है कि आप merge को संकेतक = सही के साथ ढूंढ रहे हैं।
संकेतक प्रत्येक पंक्ति को ध्वजांकित करेगा जो दोनों DataFrames में है या नहीं

df = pd.merge(foo, bar, how='left', on = 'google', indicator = True)
df['CLRS'] = (df['_merge'] == 'both').astype(int)    
#or df['CLRS'] = np.where(df['_merge'] == 'both', 1, 0)
0
Terry 25 जून 2019, 22:12