2012-04-11 13 views
14

मुझे लगता है कि मैं मूर्ख नहीं हूं, लेकिन शायद मैं गलत हूं। क्या कोई मुझे समझा सकता है कि यह क्यों काम नहीं कर रहा है? मैं 'विलय' का उपयोग करके वांछित परिणाम प्राप्त कर सकता हूं। लेकिन मुझे अंततः कई pandasDataFrames में शामिल होने की आवश्यकता है इसलिए मुझे यह विधि काम करने की आवश्यकता है।पांडः सरल 'शामिल' काम नहीं कर रहा है?

In [2]: left = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value': [4.685, 2.491]}) 

In [3]: right = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value2': [6.218, 0.001]}) 

In [4]: left.join(right, on='ST_NAME', lsuffix='_left', rsuffix='_right') 
Out[4]: 
    ST_NAME_left value ST_NAME_right value2 
0  Oregon 4.685   NaN  NaN 
1  Nebraska 2.491   NaN  NaN 

उत्तर

12

का उपयोग करके देखें merge (http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging):

In [14]: right 
Out[14]: 
    ST_NAME value2 
0 Oregon 6.218 
1 Nebraska 0.001 

In [15]: merge(left, right) 
Out[15]: 
    ST_NAME value value2 
0 Nebraska 2.491 0.001 
1 Oregon 4.685 6.218 

In [18]: merge(left, right, on='ST_NAME', sort=False) 
Out[18]: 
    ST_NAME value value2 
0 Oregon 4.685 6.218 
1 Nebraska 2.491 0.001 

DataFrame.join विरासत विधि का एक सा है और जाहिर है कॉलम-ऑन-कॉलम में शामिल नहीं होता है (मूल रूप से यह पैरामीटर पर उपयोग करके कॉलम पर इंडेक्स करता था, इसलिए "विरासत" पदनाम)।

+2

दिलचस्प। तो ऐसा लगता है कि मैं जो चाहता हूं उसे प्राप्त करने के लिए मुझे लगातार विलय करना होगा, क्योंकि 'विलय' केवल दो डेटाफ्रेम लेता है? – Phil

+0

मुझे एक ही समस्या थी और यह जवाब मिला। यह सही है। 0.16.2 दस्तावेज़ों से: संबंधित डेटाफ्रेम.जॉइन विधि, इंडेक्स-ऑन-इंडेक्स और इंडेक्स-ऑन-कॉलम में शामिल होने के लिए आंतरिक रूप से विलय का उपयोग करती है, लेकिन सामान्य कॉलम पर शामिल होने की कोशिश करने के बजाय डिफ़ॉल्ट रूप से इंडेक्स पर जुड़ती है (विलय के लिए डिफ़ॉल्ट व्यवहार)। jdmarino

संबंधित मुद्दे