পাইথন পান্ডাস কেবল নির্দিষ্ট কলামগুলিকে মার্জ করে


109

কেবলমাত্র কিছু কলামগুলিকে মার্জ করা সম্ভব? এক্স, ওয়াই, সি, ডি, ই, এফ, ইত্যাদি কলামগুলির সাথে কলাম, এক্স, ওয়াই, জেড, এবং ডিএফ 2 সহ আমার একটি ডাটাফ্রেম ডিএফ 1 রয়েছে

আমি দুটি ডাটাফ্রেম এক্স এর সাথে একত্রীকরণ করতে চাই, তবে আমি কেবল df2.a, df2.b কলামগুলি একত্রীকরণ করতে চাই - পুরো ডেটা ফ্রেম নয়।

ফলাফলটি x, y, z, a, b সহ ডেটাফ্রেম হবে।

আমি তখন মার্জ করতে পারতাম অবাঞ্ছিত কলামগুলি মুছতে, তবে মনে হয় আরও ভাল পদ্ধতি আছে।


1
অ্যান্ডি: পবিত্র গরুটি সহজ ছিল ... আমার একটি বিরতি দরকার, আমি স্পষ্টতই এটিকে আরও জটিল করে তুলছি। স্পষ্টতার জন্য ধন্যবাদ!
বুদ্বুগপিজ

উত্তর:


81

আপনি সাব-ডেটাফ্রেমে মার্জ করতে পারবেন (কেবলমাত্র সেই কলামগুলির সাথে):

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

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

6
হুম, আমি অবাক হয়েছি যে ড্রোনার সাবসেটের মতো এটি করার কোনও স্থানীয় উপায় থাকতে হবে ... গিথুব ইস্যু একসাথে রাখবে
অ্যান্ডি হেডেন

হুম ... আমি কলামটি 'ইউনিক_ এক্সটার্নাল_ইউজার্স' কে df2 থেকে df1 এ একীভূত করতে চেষ্টা করেছি তবে একটি ত্রুটি পেয়েছে ... "[সূচকের (['ইউ', 'এন', 'আই', 'কিউ', 'আপনি কোনওটাই নেই) ',' ই ',' ',' ই ',' এক্স ',' টি ',' ই ',' আর ',' এন ',' এ ', \ এন' ল ',' ',' ইউ ', 's', 'e', ​​'r', 's'], \ n dtype = 'অবজেক্ট')] [কলামগুলিতে] রয়েছে।
কুলডোকমান

এখানে কোড। ... ডিএফ 1.মিটার (ডিএফ 2 ('ইউনিক_ এক্সটার্নাল_ইউজার্স')]])
কুলডোকম্যান

1
@ কুলডোকান আমার মনে হয় আপনি প্রস্তাবিত উত্তর থেকে কিছু মিস করেছেন: list('xab')স্ট্রিং 'এক্স্যাব' এর প্রতিটি উপাদান (অক্ষর) নেবে এবং এটিকে তালিকার একটি উপাদানে রূপান্তরিত করে তাই list('xab')ফিরে আসে ['x', 'a', 'b']। এটি কাজ করে যদি প্রতিটি কলামে একটি নাম হিসাবে একটি অক্ষর থাকে। আপনার ক্ষেত্রে আমি মনে করি আপনার ডিএফ 1.সমার (ডিএফ 2 ['ইউনিক_ এক্সটার্নাল_উজনারস'], * অন্যান্য_আরগমেন্টস) করা দরকার। ... সম্ভবত আপনি এখনই এটিকে সমাধান করে
ফেলেছেন

114

আপনি দু'টি বন্ধনী ব্যবহার করতে চান, তাই যদি আপনি কোনও ভিউলুকআপ ধরণের ক্রিয়া করেন:

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

এটি আপনাকে আসল ডিএফের সমস্ত কিছু দেবে + আপনি যুক্ত হতে চান এমন ডিএফ 2-তে এটি সম্পর্কিত একটি কলাম যুক্ত করবে।


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
.ડ્રોড চেষ্টা করুন (কলামগুলি [[কী 1 '])
psangam

বা .ડ્રોড ('কী 1', অক্ষ = 1)
টোননিফ্যাশ

8

আপনি .locসমস্ত সারি দিয়ে নির্দিষ্ট কলামগুলি নির্বাচন করতে এবং তারপরে এটি টানতে পারেন। একটি উদাহরণ নীচে:

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

এই উদাহরণে, আপনি ডেটা ফ্রেম 1 এবং ডেটাফ্রেম 2 মার্জ করছেন। আপনি 'কী' তে একটি বাহ্যিক বাম জোড় করা বেছে নিয়েছেন। তবে ডেটাফ্রেম 2 এর জন্য আপনি নির্দিষ্ট করেছেন specified.iloc যা আপনাকে সংখ্যাসূচক বিন্যাসে সারি এবং কলামগুলি সুনির্দিষ্টভাবে নির্দিষ্ট করতে দেয়। ব্যবহার করে :, আপনার সমস্ত সারি [0:5]নির্বাচন করা হচ্ছে , তবে প্রথম 5 টি কলাম নির্বাচন করে। আপনি .locনাম দ্বারা নির্দিষ্ট করতে ব্যবহার করতে পারেন , তবে দীর্ঘ কলামের নামগুলির সাথে যদি আপনার আচরণ করা হয় তবে .ilocআরও ভাল।


1
সাবধান থাকুন যে .locএকটি অনুলিপি তৈরি করবে এবং এমন একটি বড় ডিএফের উপরে যা বেদনাদায়ক হতে পারে। একীভূত হওয়া আরও ভাল হতে পারে তবে সাথে সাথে একই অভিব্যক্তিতে একটি কলামের টুকরো অবিলম্বে নিন।
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, id, 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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.