2017-05-04 7 views
5

मैं कुछ डेटा, जिसमें सूचकांक एक सीमा है, और मूल्यों दो वर्गों, 0 और 1.पांडा dataframe पर सूचकांक और मूल्यों स्वैप करने के लिए कैसे

enter image description here

के लिए (सच नकारात्मक दर) TRNS हैं

मैं प्रत्येक वर्ग के लिए उस टीएनआर के अनुरूप दहलीज के टीएनआर द्वारा अनुक्रमित डेटाफ्रेम प्राप्त करना चाहता हूं। अनिवार्य रूप से, मैं यह चाहता हूँ:

enter image description here

मैं का उपयोग करके इस प्रभाव को प्राप्त करने के लिए निम्न में सक्षम हूँ:,

pd.concat([pd.Series(data[0].index.values, index=data[0]), 
      pd.Series(data[1].index.values, index=data[1])], 
      axis=1) 

या स्तंभों के किसी भी संख्या को सामान्यीकरण:

def invert_dataframe(df): 
    return pd.concat([pd.Series(df[col].index.values, 
        index=df[col]) for col in df.columns], 
        axis=1) 

हालांकि, यह बेहद हैकी और त्रुटि प्रवण लगता है। क्या ऐसा करने का कोई बेहतर तरीका है, और क्या मूल देशी पांडस कार्यक्षमता है जो ऐसा करेगी?

उत्तर

1

आप pivot साथ stack उपयोग कर सकते हैं:

data = pd.DataFrame({0:[10,20,31],10:[4,22,36], 
        1:[7,5,6]}, index=[2.1,1.07,2.13]) 

print (data) 
     0 1 10 
2.10 10 7 4 
1.07 20 5 22 
2.13 31 6 36 

df = data.stack().reset_index() 
df.columns = list('abc') 
df = df.pivot(index='c', columns='b', values='a') 
print (df) 
b  0  1  10 
c     
4 NaN NaN 2.10 
5 NaN 1.07 NaN 
6 NaN 2.13 NaN 
7 NaN 2.10 NaN 
10 2.10 NaN NaN 
20 1.07 NaN NaN 
22 NaN NaN 1.07 
31 2.13 NaN NaN 
36 NaN NaN 2.13 
+0

दिलचस्प है, मैं फिर भी मिलता है एक 'KeyError: 'level_0'' –

+0

हम्म, मैं सूची स्तंभ मान असाइन करते हैं, शायद अब यह काम करता है। – jezrael

+0

हालांकि, यह काम करने लगता है: 's = data.stack()। Reset_index (name = 'a')' 'df = s.pivot (index = 'a', कॉलम = 'level_1')' –

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