2015-06-17 10 views
5

में एकाधिक पांडा कॉलम मर्ज करें मेरे पास डेटाफ्रेम है जहां कुछ कॉलम इंगित करते हैं कि सर्वेक्षण प्रश्नों का एक सेट देखा गया था या नहीं। उदाहरण के लिए:नए कॉलम

Q1_Seen Q2_Seen Q3_Seen Q4_Seen 
    Q1a  nan  nan  nan 
    nan  Q2a  nan  nan 
    nan  nan  Q3d  nan 
    nan  Q2c  nan  nan 

मैं एक स्तंभ में इन स्तंभों संक्षिप्त करने के लिए, मान लें कि Q_Seen करते हैं, कि फार्म पर ले जाएगा चाहते हैं:

Q_Seen 
    Q1a 
    Q2a 
    Q3d 
    Q2c 

ध्यान दें कि प्रत्येक पंक्ति परस्पर अनन्य होगा: अगर वहाँ कॉलम में से एक में मूल्य है, अन्य सभी NaN होंगे।

मैंने pd.concat के साथ ऐसा करने का प्रयास किया, लेकिन ऐसा लगता है कि यह सही परिणाम नहीं दे रहा है।

उत्तर

3

इस प्रयास करें:

df['Q_Seen'] = df.stack().values 

>>> df 

Q1_Seen Q2_Seen Q3_Seen  Q4_Seen  Q_Seen 
    Q1a  nan  nan   nan  Q1a 
    nan  Q2a  nan   nan  Q2a 
    nan  nan  Q3d   nan  Q3d 
    nan  Q2c  nan   nan  Q2c 
1

निम्नलिखित मेरे लिए काम किया:

df = pd.DataFrame({'Q1': [1, None, None], 'Q2': [None, 2, None], 'Q3': [None, None, 3]}) 
df['Q'] = df.concat([df['Q1'], df['Q2'], df['Q3']]).dropna() 

एक और अधिक सुरुचिपूर्ण समाधान हो सकता है, लेकिन यह है कि क्या पहले मेरे सिर में पॉप है।

4

का उपयोग स्तंभ-वार max() - यानी max(axis=1) - आप एक एकल स्तंभ में सभी मूल्यों को संक्षिप्त करने के लिए अनुमति होगी:

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame({"Q1_Seen": ['Q1a', None, None, None], "Q2_Seen": [None, "Q2a", None, "Q2c"], "Q3_Seen": [None, None, "Q3d", None],"Q4_Seen": [None, None, None, None]}) 

In [3]: df 
Out[3]: 
    Q1_Seen Q2_Seen Q3_Seen Q4_Seen 
0  Q1a None None None 
1 None  Q2a None None 
2 None None  Q3d None 
3 None  Q2c None None 

In [4]: df['Q_Seen'] = df.max(axis=1) 

In [5]: df 
Out[5]: 
    Q1_Seen Q2_Seen Q3_Seen Q4_Seen Q_Seen 
0  Q1a None None None Q1a 
1 None  Q2a None None Q2a 
2 None None  Q3d None Q3d 
3 None  Q2c None None Q2c 
संबंधित मुद्दे