पांडा: मर्ज (ज्वाइन) दो डेटा फ्रेम कई कॉलम पर


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

बाएँ_ऑन: लेबल या सूची, या सरणी जैसे फ़ील्ड नाम बाएं डेटाफ़्रेम में शामिल होने के लिए। स्तंभों के बजाय किसी विशेष वेक्टर का उपयोग करने के लिए DataFrame की लंबाई के वैक्टर की एक वेक्टर या सूची हो सकती है

right_on: लेबल या सूची, या सरणी-जैसे फ़ील्ड नाम दाईं ओर जुड़ने के लिए DataFrame या वेक्टर / बाईं ओर के डॉक्टर्स की सूची_ docs


8
तो left_onऔर right_onही कर रहे हैं aऔर b, हम उपयोग कर सकते हैं on = ['a', 'b']?
एहबोन

4
हाँ जो पूरी तरह से मान्य है।
user3065757

4

यहाँ समस्या यह है कि एपोस्ट्रोफ्स का उपयोग करके आप एक स्ट्रिंग होने के लिए मान को सेट कर रहे हैं, जब वास्तव में, जैसा कि @Shijo ने प्रलेखन से कहा है, फ़ंक्शन एक लेबल या सूची की उम्मीद कर रहा है, लेकिन स्ट्रिंग नहीं! यदि सूची में बाएं और दाएं डेटाफ़्रेम दोनों के लिए पारित किए गए स्तंभों में से प्रत्येक का नाम शामिल है, तो प्रत्येक स्तंभ-नाम व्यक्तिगत रूप से एपोस्ट्रोफ़ के भीतर होना चाहिए । क्या कहा गया है, हम समझ सकते हैं कि यह क्यों गलत है:

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')

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.