পান্ডাস 101 মার্জ করছে


362
  • কীভাবে একটি ( LEFT| RIGHT| FULL) ( INNER| OUTER) পান্ডার সাথে যোগদান করবেন?
  • মার্জ হওয়ার পরে কীভাবে আমি সারণী অনুপস্থিত জন্য NaN যুক্ত করব?
  • মার্জ হওয়ার পরে কীভাবে আমি এনএনএস থেকে মুক্তি পাব?
  • আমি কি সূচকে মার্জ করতে পারি?
  • পান্ডের সাথে ক্রস যোগ দেবেন?
  • আমি একাধিক ডেটাফ্রেমগুলিকে কীভাবে মার্জ করব?
  • merge? join? concat? update? WHO? কি? কেন ?!

... এবং আরও অনেক কিছু। আমি এই পুনরাবৃত্ত প্রশ্নগুলি পান্ডার একত্রীকরণ কার্যকারিতার বিভিন্ন দিক সম্পর্কে জিজ্ঞাসা করে দেখেছি। একত্রীকরণ এবং এর বিভিন্ন ব্যবহারের কেস সম্পর্কিত আজ বেশিরভাগ তথ্যই কয়েক ডজন খারাপ শব্দযুক্ত, অপ্রকাশযোগ্য পোস্টে বিভক্ত। এখানে উদ্দেশ্য উত্তরোত্তর জন্য আরও কিছু গুরুত্বপূর্ণ পয়েন্ট সমান্তরাল করাই।

এই সচিন সাধারণ পান্ডাস বাগধারার মাধ্যমে সহায়ক ব্যবহারকারী-গাইড একটি সিরিজ পরবর্তী কিস্তি হতে বোঝানো হয় (দেখুন অন্য pivoting এই পোস্টটি এবং সংযুক্তকরণের এই পোস্টটি , যা আমি উপর স্পর্শ করা হবে, পরে)।

দয়া করে মনে রাখবেন এই পোস্টে করা হয় না জন্য একটি প্রতিস্থাপন হতে বোঝানো ডকুমেন্টেশন , যাতে পাশাপাশি অনুগ্রহ করে পড়ুন! কিছু উদাহরণ সেখান থেকে নেওয়া হয়েছে।

উত্তর:


517

এই পোস্টটির পাঠকরা এসকিউএল-স্বাদযুক্ত পান্ডার সাথে মার্জ করা, এটি কীভাবে ব্যবহার করবেন এবং কখন এটি ব্যবহার করবেন না তার প্রাইমর দেওয়া।

বিশেষত, এই পোস্টটি যা যা করবে তা এখানে:

  • বুনিয়াদি - প্রকারের সাথে যোগ দেয় (বাম, অধিকার, আউট, ইনার)

    • বিভিন্ন কলামের নামের সাথে মার্জ করা
    • আউটপুটে সদৃশ মার্জ কী কলামটি এড়ানো
  • বিভিন্ন অবস্থার অধীনে সূচকের সাথে একত্রীকরণ
    • কার্যকরভাবে আপনার নামকরণ সূচক ব্যবহার
    • একের সূচি এবং অন্যটির কলামের সূচি হিসাবে কীটি মার্জ করুন
  • মাল্টিওয়ে কলাম এবং সূচিগুলিতে মার্জ করে (অনন্য এবং অদ্বিতীয়)
  • এর মধ্যে উল্লেখযোগ্য বিকল্প mergeএবংjoin

এই পোস্টে যা হবে না:

  • পারফরম্যান্স-সম্পর্কিত আলোচনা এবং সময় (এখন জন্য)। বেশিরভাগ ক্ষেত্রেই উপযুক্ত যেখানে ভাল বিকল্পের উল্লেখযোগ্য উল্লেখযোগ্য।
  • প্রত্যয়গুলি পরিচালনা করা, অতিরিক্ত কলামগুলি মুছে ফেলা, আউটপুটগুলির নাম পরিবর্তনকরণ এবং অন্যান্য নির্দিষ্ট ব্যবহারের ক্ষেত্রে। অন্যান্য (পড়ুন: আরও ভাল) পোস্টগুলি যে এটির সাথে ডিল করে, তাই এটি নির্ধারণ করুন!

দ্রষ্টব্য
সুনির্দিষ্ট উদাহরণগুলি অন্য বৈশিষ্ট্যগুলি প্রদর্শন না করে বিভিন্ন বৈশিষ্ট্য প্রদর্শনের সময় INNER যোগদানের ক্রিয়াকলাপে ডিফল্ট হয়।

তদতিরিক্ত, এখানে সমস্ত ডেটা ফ্রেমগুলি অনুলিপি এবং অনুলিপি করা যায় যাতে আপনি তাদের সাথে খেলতে পারেন। এছাড়াও, আপনার ক্লিপবোর্ড থেকে কীভাবে ডেটা ফ্রেমগুলি পড়তে হয় সে সম্পর্কে এই পোস্টটি দেখুন ।

সবশেষে, জোইন অপারেশনের সমস্ত ভিজ্যুয়াল উপস্থাপনা গুগল অঙ্কন ব্যবহার করে হাতে আঁকানো হয়েছে। এখান থেকে অনুপ্রেরণা ।

পর্যাপ্ত আলাপ, কীভাবে ব্যবহার করতে হবে তা আমাকে দেখান merge!

সেটআপ

np.random.seed(0)
left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': np.random.randn(4)})    
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': np.random.randn(4)})

left

  key     value
0   A  1.764052
1   B  0.400157
2   C  0.978738
3   D  2.240893

right

  key     value
0   B  1.867558
1   D -0.977278
2   E  0.950088
3   F -0.151357

সরলতার স্বার্থে, মূল কলামটির একই নাম (আপাতত) রয়েছে।

একটি অন্তর্ভুক্ত যোগদান দ্বারা প্রতিনিধিত্ব করা হয়

এটি দ্রষ্টব্য
, আসন্ন পরিসংখ্যান সহ সকলেই এই সম্মেলনটি অনুসরণ করে:

  • নীল সারিগুলি নির্দেশ করে যা মার্জ ফলাফলের মধ্যে উপস্থিত present
  • লাল ফলাফলগুলি থেকে বাদ দেওয়া সারিগুলি নির্দেশ করে (যেমন, সরানো)
  • সবুজ অনুপস্থিত মানগুলিকে নির্দেশ করে যা ফলাফলের মধ্যে NaN দ্বারা প্রতিস্থাপিত হয়

একটি অন্তর্ভুক্ত mergeযোগদানের জন্য, ডান ডেটাফ্রেম এবং যুক্ত কী (খুব কমপক্ষে) যুক্তি হিসাবে উল্লেখ করে বাম ডাটাফ্রেমে কল করুন।

left.merge(right, on='key')
# Or, if you want to be explicit
# left.merge(right, on='key', how='inner')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278

এটি কেবলমাত্র সারিগুলি থেকে ফিরে আসে leftএবং rightযা একটি সাধারণ কী ভাগ করে (উদাহরণস্বরূপ, "বি" এবং "ডি)।

একটি বাম আউটরের যোগদান , বা বাম যোগদান দ্বারা প্রতিনিধিত্ব করা হয়

এটি নির্দিষ্ট করে সম্পাদন করা যেতে পারে how='left'

left.merge(right, on='key', how='left')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278

মনোযোগ সহকারে এখানে এনএএনএস স্থাপন করুন। আপনি যদি নির্দিষ্ট করে থাকেন how='left'তবে কেবলমাত্র কীগুলি leftব্যবহার করা হবে এবং এর থেকে অনুপস্থিত ডেটা rightNaN দ্বারা প্রতিস্থাপিত হবে।

এবং তেমনিভাবে, একটি সঠিক আউট জয়েনের জন্য , বা সঠিক যোগদানের জন্য যা ...

... নির্দিষ্ট করুন how='right':

left.merge(right, on='key', how='right')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278
2   E       NaN  0.950088
3   F       NaN -0.151357

এখানে, থেকে কীগুলি rightব্যবহার করা হয়, এবং থেকে হারিয়ে যাওয়া ডেটা leftNaN দ্বারা প্রতিস্থাপন করা হয়।

পরিশেষে, প্রদত্ত ফুল আউটর জয়েনের জন্য

উল্লেখ how='outer'

left.merge(right, on='key', how='outer')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278
4   E       NaN  0.950088
5   F       NaN -0.151357

এটি উভয় ফ্রেমের কীগুলি ব্যবহার করে এবং দু'এই সারি নিখোঁজ হওয়ার জন্য NaN areোকানো হয়েছে।

ডকুমেন্টেশন এই বিভিন্ন মার্জগুলি সংক্ষিপ্তসার করে:

এখানে চিত্র বর্ণনা লিখুন

অন্যান্য যোগদান - বাম-বাদ, ডান-বাদ, এবং সম্পূর্ণ-বাদ দিয়ে / এন্টি যোগদান

আপনার যা দরকার তা যদি বাঁ-অপসারণ যোগদান করে এবং ডান-অপসারণ যোগদান করে দুই ধাপ হবে।

বাম-বাদ দিয়ে যোগ দানের জন্য, হিসাবে উপস্থাপিত

একটি বাম আউটয়ার জয়েন সম্পাদন করে এবং তারপরে leftকেবলমাত্র আসার পরে (বাদ দিয়ে!) সারিগুলি শুরু করে ,

(left.merge(right, on='key', how='left', indicator=True)
     .query('_merge == "left_only"')
     .drop('_merge', 1))

  key   value_x  value_y
0   A  1.764052      NaN
2   C  0.978738      NaN

কোথায়,

left.merge(right, on='key', how='left', indicator=True)

  key   value_x   value_y     _merge
0   A  1.764052       NaN  left_only
1   B  0.400157  1.867558       both
2   C  0.978738       NaN  left_only
3   D  2.240893 -0.977278       both

এবং তেমনিভাবে, একটি রাইট-ব্যতীত যোগদানের জন্য,

(left.merge(right, on='key', how='right', indicator=True)
     .query('_merge == "right_only"')
     .drop('_merge', 1))

  key  value_x   value_y
2   E      NaN  0.950088
3   F      NaN -0.151357

শেষ অবধি, আপনার যদি এমন একীকরণ করতে হয় যা কেবল বাম বা ডান দিক থেকে কীগুলি ধরে রাখে, তবে উভয়ই নয় (আইডাব্লু, একটি আন্ত-যোগে পারফর্ম করছেন ),

আপনি অনুরূপ ফ্যাশন এ এটি করতে পারেন—

(left.merge(right, on='key', how='outer', indicator=True)
     .query('_merge != "both"')
     .drop('_merge', 1))

  key   value_x   value_y
0   A  1.764052       NaN
2   C  0.978738       NaN
4   E       NaN  0.950088
5   F       NaN -0.151357

কী কলামগুলির জন্য বিভিন্ন নাম

কী কলামগুলি আলাদা আলাদাভাবে নামকরণ করা হয়েছে - উদাহরণস্বরূপ, leftরয়েছে keyLeftএবং rightএর keyRightপরিবর্তে এটি রয়েছে: এর পরিবর্তে keyআপনাকে উল্লেখ করতে হবে left_onএবং right_onপরিবর্তে যুক্তি হিসাবে on:

left2 = left.rename({'key':'keyLeft'}, axis=1)
right2 = right.rename({'key':'keyRight'}, axis=1)

left2

  keyLeft     value
0       A  1.764052
1       B  0.400157
2       C  0.978738
3       D  2.240893

right2

  keyRight     value
0        B  1.867558
1        D -0.977278
2        E  0.950088
3        F -0.151357

left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner')

  keyLeft   value_x keyRight   value_y
0       B  0.400157        B  1.867558
1       D  2.240893        D -0.977278

আউটপুটে সদৃশ কী কলামটি এড়ানো

keyLeftকাছ থেকে আসা leftএবং keyRightথেকে মার্জ করার সময় right, আপনি যদি কেবল আউটপুটে keyLeftবা keyRightউভয় (তবে উভয়ই নয়) চান তবে আপনি সূচকটিকে প্রাথমিক পদক্ষেপ হিসাবে সেট করে শুরু করতে পারেন।

left3 = left2.set_index('keyLeft')
left3.merge(right2, left_index=True, right_on='keyRight')

    value_x keyRight   value_y
0  0.400157        B  1.867558
1  2.240893        D -0.977278

কমান্ডের ঠিক আগে আউটপুট দিয়ে left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner')এটির বৈসাদৃশ্য করুন (এটি হ'ল আউটপুট ), আপনি লক্ষ্য করবেন না keyLeftis কোন ফ্রেমের সূচকে কী হিসাবে সেট করা হয়েছে তার ভিত্তিতে কোন কলামটি রাখতে হবে তা আপনি নির্ধারণ করতে পারেন। এটি যখন আউটর জয়েন অপারেশন সম্পাদন করে তখন বলতে পারে।

এর মধ্যে একটি থেকে কেবল একটি একক কলাম মার্জ করা DataFrames

উদাহরণস্বরূপ, বিবেচনা করুন

right3 = right.assign(newcol=np.arange(len(right)))
right3
  key     value  newcol
0   B  1.867558       0
1   D -0.977278       1
2   E  0.950088       2
3   F -0.151357       3

যদি আপনার কেবল "নতুন_ওয়াল" (অন্য কোনও কলাম ছাড়াই) মার্জ করতে হয় তবে আপনি মার্জ করার আগে সাধারণত কলামগুলি সাবসেট করতে পারেন:

left.merge(right3[['key', 'newcol']], on='key')

  key     value  newcol
0   B  0.400157       0
1   D  2.240893       1

আপনি যদি একটি বাম আউটয়ার জয়েন করে থাকেন তবে আরও পারফরম্যান্স সমাধানটিতে অন্তর্ভুক্ত থাকবে map:

# left['newcol'] = left['key'].map(right3.set_index('key')['newcol']))
left.assign(newcol=left['key'].map(right3.set_index('key')['newcol']))

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

যেমনটি উল্লেখ করা হয়েছে, এটি এর সাথে সমান, তবে এর চেয়ে দ্রুত

left.merge(right3[['key', 'newcol']], on='key', how='left')

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

একাধিক কলামে মার্জ করা হচ্ছে

একাধিক কলাম এ যোগ দিতে, জন্য একটি তালিকা নির্দিষ্ট on(অথবা left_onএবং right_onউপযুক্ত হিসাবে)।

left.merge(right, on=['key1', 'key2'] ...)

অথবা, ইভেন্টে নামগুলি আলাদা,

left.merge(right, left_on=['lkey1', 'lkey2'], right_on=['rkey1', 'rkey2'])

অন্যান্য দরকারী merge*অপারেশন এবং ফাংশন

  • সূচকে সিরিজের সাথে ডেটাফ্রেম একত্রিত করা : এই উত্তরটি দেখুন ।
  • তদ্ব্যতীত merge, DataFrame.updateএবং DataFrame.combine_firstনির্দিষ্ট কিছু ক্ষেত্রে অন্যটির সাথে একটি ডেটা ফ্রেম আপডেট করতে ব্যবহৃত হয়।

  • pd.merge_ordered অর্ডারযুক্ত জোয়েন্টগুলির জন্য একটি কার্যকর ফাংশন।

  • pd.merge_asof(পড়ুন: মার্জ_এসফ) আনুমানিক যোগদানের জন্য দরকারী ।

এই বিভাগটি কেবলমাত্র খুব মৌলিক বিষয়গুলি কভার করে এবং এটি কেবল আপনার ক্ষুধা ঘটাতে ডিজাইন করা হয়েছে। আরো উদাহরণ এবং মামলা জন্য, দেখুন উপর ডকুমেন্টেশন merge, joinএবংconcat সেইসাথে ফাংশন চশমা লিঙ্ক হিসাবে।


সূচক-ভিত্তিক * -জয়াইন (+ সূচক-কলাম merge)

সেটআপ

np.random.seed([3, 14])
left = pd.DataFrame({'value': np.random.randn(4)}, index=['A', 'B', 'C', 'D'])    
right = pd.DataFrame({'value': np.random.randn(4)}, index=['B', 'D', 'E', 'F'])
left.index.name = right.index.name = 'idxkey'

left
           value
idxkey          
A      -0.602923
B      -0.402655
C       0.302329
D      -0.524349

right

           value
idxkey          
B       0.543843
D       0.013135
E      -0.326498
F       1.385076

সাধারণত, সূচীতে একীভূত হওয়ার বিষয়টি দেখতে পাবেন:

left.merge(right, left_index=True, right_index=True)


         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

সূচকের নামগুলির জন্য সমর্থন

যদি আপনার সূচকের নাম দেওয়া হয়, তবে v0.23 ব্যবহারকারীরা স্তরের নামও on(বা left_onএবং right_onপ্রয়োজনীয় হিসাবে) নির্দিষ্ট করতে পারবেন ।

left.merge(right, on='idxkey')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

অন্যের কলাম (গুলি) এর সূচকে মার্জ করা

একের সূচক এবং অন্যটির কলামটি, একত্রিত করার জন্য এটি ব্যবহার করা সম্ভব (এবং বেশ সহজ)। উদাহরণ স্বরূপ,

left.merge(right, left_on='key1', right_index=True)

বা বিপরীত ( right_on=...এবং left_index=True)।

right2 = right.reset_index().rename({'idxkey' : 'colkey'}, axis=1)
right2

  colkey     value
0      B  0.543843
1      D  0.013135
2      E -0.326498
3      F  1.385076

left.merge(right2, left_index=True, right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

এই বিশেষ ক্ষেত্রে, সূচকটির leftনামকরণ করা হয়েছে, সুতরাং আপনি সূচির নামটিও এর সাথে ব্যবহার করতে পারেন left_on:

left.merge(right2, left_on='idxkey', right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

DataFrame.join
এগুলি ছাড়াও, আরও একটি সংক্ষিপ্ত বিকল্প রয়েছে। DataFrame.joinসূচকগুলিতে কোন ডিফল্টগুলিতে যোগদান হয় আপনি তা ব্যবহার করতে পারেন । DataFrame.joinএকটি ডিফল্ট হিসাবে একটি বাম আউটয়ার যোগদান করে, তাই how='inner'এখানে প্রয়োজনীয়।

left.join(right, how='inner', lsuffix='_x', rsuffix='_y')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

নোট করুন যেহেতু আমার পক্ষে যুক্তিগুলি lsuffixএবং rsuffixযুক্তিগুলি নির্দিষ্ট করার দরকার ছিল যেহেতু joinঅন্যথায় ত্রুটি ঘটবে:

left.join(right)
ValueError: columns overlap but no suffix specified: Index(['value'], dtype='object')

যেহেতু কলামের নাম একই। তাদের আলাদা আলাদা নাম দেওয়া থাকলে সমস্যা হবে না।

left.rename(columns={'value':'leftvalue'}).join(right, how='inner')

        leftvalue     value
idxkey                     
B       -0.402655  0.543843
D       -0.524349  0.013135

pd.concat
শেষ অবধি, সূচক-ভিত্তিক যোগদানের বিকল্প হিসাবে আপনি ব্যবহার করতে পারেন pd.concat:

pd.concat([left, right], axis=1, sort=False, join='inner')

           value     value
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

ফেরত join='inner'আপনি একটি সম্পূর্ণ বহিঃস্থ সংযোগ (ডিফল্ট) প্রয়োজন হলে:

pd.concat([left, right], axis=1, sort=False)

      value     value
A -0.602923       NaN
B -0.402655  0.543843
C  0.302329       NaN
D -0.524349  0.013135
E       NaN -0.326498
F       NaN  1.385076

আরও তথ্যের জন্য, এই pd.concatপিওএসস্কয়ার্ড দ্বারা পোস্ট করা পোস্টটি দেখুন ।


সরলীকরণ: merge একাধিক ডেটা ফ্রেমগুলি অন্তর্ভুক্ত করা হচ্ছে

প্রায়শই, একাধিক ডেটা ফ্রেম একসাথে একত্রীকরণ করতে গেলে পরিস্থিতি দেখা দেয়। নিঃসন্দেহে, mergeকলগুলি শৃঙ্খলাবদ্ধ করে এটি করা যেতে পারে :

df1.merge(df2, ...).merge(df3, ...)

তবে এটি অনেক ডেটা ফ্রেমের জন্য দ্রুত হাতছাড়া হয়ে যায়। তদ্ব্যতীত, অজানা সংখ্যক ডেটা ফ্রেমগুলির জন্য সাধারণকরণ করা প্রয়োজন হতে পারে।

আমি এখানে অনন্য কীগুলিতে মাল্টি-ওয়ে যোগদানের জন্য এবং অ-অনন্য কীগুলিতে pd.concatমাল্টি-ওয়ে যোগদানের জন্য পরিচয় করিয়ে দিচ্ছি । প্রথমে সেটআপ।DataFrame.join

# Setup.
np.random.seed(0)
A = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'valueA': np.random.randn(4)})    
B = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'valueB': np.random.randn(4)})
C = pd.DataFrame({'key': ['D', 'E', 'J', 'C'], 'valueC': np.ones(4)})
dfs = [A, B, C] 

# Note, the "key" column values are unique, so the index is unique.
A2 = A.set_index('key')
B2 = B.set_index('key')
C2 = C.set_index('key')

dfs2 = [A2, B2, C2]

একচেটিয়া কীগুলিতে (বা সূচি) মাল্টিওয়ে একত্রীকরণ

যদি আপনার কীগুলি (এখানে, কীটি কলাম বা সূচি হতে পারে) অনন্য হয়, তবে আপনি ব্যবহার করতে পারেন pd.concat। নোট করুন যে pd.concatসূচীতে ডেটাফ্রেমে যোগ দেয়

# merge on `key` column, you'll need to set the index before concatenating
pd.concat([
    df.set_index('key') for df in dfs], axis=1, join='inner'
).reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# merge on `key` index
pd.concat(dfs2, axis=1, sort=False, join='inner')

       valueA    valueB  valueC
key                            
D    2.240893 -0.977278     1.0

ফেরত join='inner'একটি পূর্ণ বাহ্য জন্য যোগ দিন। মনে রাখবেন যে আপনি বাম বা ডানদিকে বাইরে যোগ দিতে পারবেন না (যদি আপনার এগুলির প্রয়োজন হয় তবে ব্যবহার করুনjoin নীচে বর্ণিত )।

ডুপ্লিকেট সহ কীগুলিতে মাল্টিওয়ে একত্রীকরণ

concatদ্রুত, তবে এর কমতি রয়েছে। এটি সদৃশগুলি পরিচালনা করতে পারে না।

A3 = pd.DataFrame({'key': ['A', 'B', 'C', 'D', 'D'], 'valueA': np.random.randn(5)})

pd.concat([df.set_index('key') for df in [A3, B, C]], axis=1, join='inner')
ValueError: Shape of passed values is (3, 4), indices imply (3, 2)

এই পরিস্থিতিতে, আমরা এটি ব্যবহার করতে পারি joinযেহেতু এটি অ-অনন্য কীগুলি পরিচালনা করতে পারে (নোট করুন যে joinতাদের সূচীতে ডেটাফ্রেমে যোগ দেয়; এটি mergeহুডের নীচে কল করে এবং অন্যথায় নির্দিষ্ট না করা পর্যন্ত একটি বাম আউটার জয়েন করে)।

# join on `key` column, set as the index first
# For inner join. For left join, omit the "how" argument.
A.set_index('key').join(
    [df.set_index('key') for df in (B, C)], how='inner').reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# join on `key` index
A3.set_index('key').join([B2, C2], how='inner')

       valueA    valueB  valueC
key                            
D    1.454274 -0.977278     1.0
D    0.761038 -0.977278     1.0

49

এর পরিপূরক ভিজ্যুয়াল ভিউ pd.concat([df0, df1], kwargs)। লক্ষ্য করুন যে, kwarg axis=0বা axis=1এর অর্থ হিসেবে স্বজ্ঞাত নয় df.mean()বাdf.apply(func)


পিডি.কোনকেটে ([df0, df1])


9
এটি একটি দুর্দান্ত চিত্র। আপনি জিজ্ঞাসা করতে পারেন আপনি এটি উত্পাদন কিভাবে?
CS95

6
গুগল ডকের অন্তর্নির্মিত "সন্নিবেশ ==> অঙ্কন ... ==> নতুন" (2019-মে পর্যন্ত)। তবে, স্পষ্টরূপে: এই ছবিটির জন্য আমি গুগল ডকটি ব্যবহার করার একমাত্র কারণ হ'ল আমার নোটগুলি গুগল ডক্সে সঞ্চিত আছে এবং আমি এমন একটি ছবি চাই যা গুগল ডকের মধ্যেই দ্রুত পরিবর্তন করা যায়। আসলে এখন আপনি এটি উল্লেখ করেছেন, গুগল ডকের অঙ্কন সরঞ্জামটি বেশ ঝরঝরে।
eliu

বাহ, এটা দুর্দান্ত। এসকিউএল ওয়ার্ল্ড থেকে আগত, "উল্লম্ব" যোগটি আমার মাথায় যোগদান নয়, কারণ টেবিলের কাঠামোটি সর্বদা স্থির থাকে। এখন এমনকি ভাবেন পান্ডাদের একত্রীকরণ করা উচিত concatএবং mergeএকটি দিকের পরামিতি থাকা horizontalবা থাকা উচিত vertical
ইউফোস

2
@ ইউফস ঠিক কি axis=1এবং না কি axis=0?
cs95

2
হ্যাঁ, এখন mergeএবং concatএবং অক্ষ এবং যাই হোক না কেন। যাইহোক, @ ইলিউ দেখায়, এটি সমস্ত "বাম" এবং "ডান" এবং "অনুভূমিক" বা "উল্লম্ব" এর সাথে একত্রীকরণের একই ধারণা । আমাকে, ব্যক্তিগতভাবে, ডকুমেন্টেশনটি প্রতিবার আমাকে "অক্ষ" কী 0এবং কোনটি মনে রাখতে হবে 1
ইউফোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.