পান্ডাস: একাধিক কলামে দুটি ডেটা ফ্রেম মার্জ (যোগ দিন)


169

আমি দুটি কলাম ব্যবহার করে দুটি পান্ডাস ডেটা ফ্রেমে যোগদানের চেষ্টা করছি:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

তবে নিম্নলিখিত ত্রুটিটি পেয়েছে:

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()

KeyError: '[B_1, c2]'

কোন ধারণা কি এটি করার সঠিক উপায় হওয়া উচিত? ধন্যবাদ!


52
left_onএবং right_onস্ট্রিংগুলির তালিকা হওয়া উচিত, তালিকার মতো দেখতে পাওয়া স্ট্রিং নয়।
রুট

উত্তর:


312

এটা চেষ্টা কর

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

বাম_অন: লেবেল বা তালিকা, বা অ্যারের মতো ক্ষেত্রের নাম বাম ডাটাফ্রেমে যোগ দিতে। কোনও নির্দিষ্ট ভেক্টরকে কলামের পরিবর্তে জয়েন কী হিসাবে ব্যবহার করতে ডেটাফ্রেমের দৈর্ঘ্যের ভেক্টর বা তালিকা হতে পারে

ডান_অন: লেবেল বা তালিকা, বা অ্যারে-মত ক্ষেত্রের নাম ডান ডাটাফ্রেমে যোগদানের জন্য বা ভেক্টর / প্রতি বাম_ ডক্সে ভেক্টরের তালিকায়


8
যদি left_onএবং right_onএকই হয় aএবং b, আমরা কি ব্যবহার করতে পারি on = ['a', 'b']?
আহ্বন

4
হ্যাঁ এটি পুরোপুরি বৈধ।
ব্যবহারকারী 3065757

4

এখানে সমস্যাটি হ'ল এস্ট্রোফেসগুলি ব্যবহার করে আপনি মানটিকে স্ট্রিং হিসাবে নির্ধারণ করছেন, যখন বাস্তবে @ শিজো ডকুমেন্টেশন থেকে উল্লেখ করেছেন, ফাংশনটি একটি স্ট্রিং নয় বরং একটি লেবেল বা তালিকার প্রত্যাশা করছে! যদি তালিকায় বাম এবং ডান উভয় ডেটাফ্রেমের জন্য পাসকৃত কলামগুলির প্রত্যেকটির নাম থাকে তবে প্রতিটি কলামের নাম পৃথকভাবে অ্যাডাস্ট্রোফের মধ্যে থাকতে হবে। যা বর্ণিত হয়েছে তা দিয়ে আমরা বুঝতে পারি যে এটি কেন আবশ্যক:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

এবং এটি ফাংশনটি ব্যবহারের সঠিক উপায়:

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

3

এটি করার আরেকটি উপায়: new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.