पायथन पंडों का केवल कुछ स्तंभों में विलय होता है


109

क्या केवल कुछ स्तंभों को मर्ज करना संभव है? मेरे पास कॉलम x, a, b, c, d, e, f, आदि कॉलम X, y, z, और df2 के साथ एक DataFrame df1 है।

मैं x पर दो DataFrames को मर्ज करना चाहता हूं, लेकिन मैं केवल df2.a, df2.b कॉलम को मर्ज करना चाहता हूं - संपूर्ण DataFrame नहीं।

परिणाम x, y, z, a, b के साथ एक DataFrame होगा।

मैं विलय कर सकता था फिर अवांछित कॉलम हटा सकता हूं, लेकिन ऐसा लगता है कि एक बेहतर तरीका है।


1
एंडी: पवित्र गाय जो आसान थी ... मुझे एक ब्रेक की आवश्यकता है, मैं स्पष्ट रूप से इसे बहुत जटिल बना रहा हूं। स्पष्टता के लिए धन्यवाद!
बबलगुपीज 19

जवाबों:


81

आप सब-डेटाफ़्रेम (केवल उन स्तंभों के साथ) को मर्ज कर सकते हैं:

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])

6
हम्म, मुझे आश्चर्य है कि अगर ऐसा करने के लिए एक देशी तरीका होना चाहिए, जैसे कि ड्रॉपना में सबसेट ... गीथूब मुद्दे को एक साथ रख देंगे
एंडी हेडन

हम्म्म ... मैंने df2 से df1 तक कॉलम 'Unique_External_Users' को मर्ज करने के लिए इसका उपयोग करने की कोशिश की, लेकिन एक त्रुटि मिली ... "कोई भी [अनुक्रमणिका (['U', 'n', 'i', 'q', 'u) ',' ई ',' ',' ई ',' एक्स ',' टी ',' ई ',' आर ',' एन ',' ए ', \ एन' एल ',' ',' यू ', 's', 'e', ​​'r', 's'], \ n dtype = 'object')] [कॉलम] में हैं।
कूलडॉमन

यहाँ कोड है। ... df1.merge (df2 ('Unique_External_Users')])
CoolDocMan

1
@CoolDocMan मुझे लगता है कि आपने प्रस्तावित उत्तर से कुछ याद किया: list('xab')स्ट्रिंग 'xab' के प्रत्येक तत्व (अक्षर) को लेता है और इसे एक सूची तत्व में परिवर्तित करता है ताकि list('xab')रिटर्न हो ['x', 'a', 'b']। यह काम करता है अगर प्रत्येक कॉलम में नाम के रूप में एक ही अक्षर हो। आपके मामले में मुझे लगता है कि आपको df1.merge (df2 ['Unique_External_Users'], * other_arguments) करने की आवश्यकता है। ... सबसे शायद आप पहले से ही अब तक इसे हल कर चुके हैं, बस इसे मेरे चारों ओर newbies के लिए छोड़ रहे हैं, जैसे
SOf_PUAR

114

आप TWO कोष्ठक का उपयोग करना चाहते हैं, इसलिए यदि आप VLOOKUP प्रकार की क्रिया कर रहे हैं:

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

यह आपको मूल df में वह सब कुछ देगा + जो df2 में आप जोड़ना चाहते हैं, उसमें एक संगत कॉलम जोड़ें।


11

यदि आप लक्ष्य डेटा फ़्रेम से कॉलम (एस) को छोड़ना चाहते हैं, लेकिन शामिल होने के लिए कॉलम (एस) की आवश्यकता होती है, तो आप निम्न कार्य कर सकते हैं:

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop('key1')

यह .drop('key1')भाग परिणामी डेटा फ़्रेम में रखे जाने से 'की -1' को रोकेगा, इसके बावजूद इसे पहली जगह में शामिल होना आवश्यक है।


4
अगर मुझे यह KeyError: "['key1'] not found in axis"
आज़माया जाता है

3
try .drop (कॉलम = ['key1'])
psangam

या .drop ('की 1', अक्ष = 1)
20

8

आप .locसभी पंक्तियों के साथ विशिष्ट स्तंभों का चयन करने के लिए उपयोग कर सकते हैं और फिर उसे खींच सकते हैं। एक उदाहरण नीचे है:

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

इस उदाहरण में, आप dataframe1 और dataframe2 को मर्ज कर रहे हैं। आपने 'की' पर एक बाहरी लेफ्ट जॉइन करने के लिए चुना है। हालांकि, डेटाफ्रेम 2 के लिए आपने निर्दिष्ट किया है .ilocजो आपको संख्यात्मक प्रारूप में इच्छित पंक्तियों और स्तंभों को निर्दिष्ट करने की अनुमति देता है। का उपयोग करते हुए :, अपनी सभी पंक्तियों का चयन, लेकिन [0:5]पहले 5 कॉलम का चयन करता है। आप .locनाम से निर्दिष्ट करने के लिए उपयोग कर सकते हैं , लेकिन यदि आपका कॉलम लंबे कॉलम के नामों से संबंधित है, तो .ilocबेहतर हो सकता है।


1
खबरदार जो .locएक प्रतिलिपि बनायेगा, और एक बड़े df पर जो दर्दनाक हो सकता है। विलय करना बेहतर हो सकता है फिर तुरंत उसी अभिव्यक्ति में एक कॉलम स्लाइस लें।
smci

7

यह चयनित स्तंभों को दो तालिकाओं से मर्ज करना है।

तो table_1शामिल t1_a,t1_b,t1_c..,id,..t1_zस्तंभ, और table_2होता है t2_a, t2_b, t2_c..., id,..t2_z, फिर कॉलम, और केवल t1_a, आईडी, t2_a अंतिम तालिका में आवश्यक हैं

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file    
mergedCSV.to_csv('output.csv',index = False)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.