python - शामिल होने का उपयोग कर पांडस में vlookup




join pandas (2)

वीबीए में वीएलओपअप सिर्फ pandas.dataframe.merge की तरह है

मैं हमेशा अतीत में वीबीए के लिए कई प्रक्रियाओं की तलाश करता हूं और अब पायथन डेटाफ्रेम मुझे काम का एक टन बचाता है, अच्छी बात यह है कि मुझे एक vlookup विधि लिखने की आवश्यकता नहीं है।

pandas.DataFrame.merge

>>> A              >>> B
    lkey value         rkey value
0   foo  1         0   foo  5
1   bar  2         1   bar  6
2   baz  3         2   qux  7
3   foo  4         3   bar  8
>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
   lkey  value_x  rkey  value_y
0  foo   1        foo   5
1  foo   4        foo   5
2  bar   2        bar   6
3  bar   2        bar   8
4  baz   3        NaN   NaN
5  NaN   NaN      qux   7

आप बाएं विलय करने के लिए निम्न को भी आजमा सकते हैं।

import pandas as pd
pd.merge(left, right, left_on = 'key', right_on = 'key', how='left')

एसक्यूएल की तरह बाहरी या बाएं कार्य, पायथन की अंतर्निर्मित कक्षा डेटाफ्रेम में कई तर्क लेने में विधि विलय है, जो बहुत विस्तृत और आसान है।

मेरे पास निम्नलिखित 2 डेटाफ्रेम हैं

Example1
sku loc flag  
122  61 True 
123  61 True
113  62 True 
122  62 True 
123  62 False
122  63 False
301  63 True 

Example2 
sku dept 
113 a
122 b
123 b
301 c 

मैं नीचे विलय करना चाहता हूं, या नीचे डेटा फ्रेम का उत्पादन करने के लिए पांडस (या जो भी पाइथन ऑपरेटर सबसे अच्छा है) का उपयोग करके ऑपरेशन में शामिल होना चाहता हूं।

Example3
sku loc flag   dept  
122  61 True   b
123  61 True   b
113  62 True   a
122  62 True   b
123  62 False  b
122  63 False  b
301  63 True   c

Both 
df_Example1.join(df_Example2,lsuffix='_ProdHier')
df_Example1.join(df_Example2,how='outer',lsuffix='_ProdHier')

काम नहीं कर रहे हैं मैं क्या गलत कर रहा हूं?


निम्नानुसार apply और lambda का उपयोग apply लिए एक और सामान्य आवेदन होगा:

dict1 = {113:'a',
         122:'b',
         123:'b',
         301:'c'}

df = pd.DataFrame([['1', 113],
                   ['2', 113],
                   ['3', 301],
                   ['4', 122],
                   ['5', 113]], columns=['num', 'num_letter'])

एक नया डेटा फ्रेम कॉलम के रूप में जोड़ें

 **df['letter'] = df['num_letter'].apply(lambda x: dict1[x])**

  num  num_letter letter
0   1         113      a
1   2         113      a
2   3         301      c
3   4         122      b
4   5         113      a

या मौजूदा ('num_letter') कॉलम को प्रतिस्थापित करें

 **df['num_letter'] = df['num_letter'].apply(lambda x: dict1[x])**

  num num_letter
0   1          a
1   2          a
2   3          c
3   4          b
4   5          a




vlookup