2013-12-12 18 views
5

क्या इस डेटा को बदलने के लिए कोई पांडा फ़ंक्शन है, इसलिए यह कॉलम को बी, सी, डी, ई या डेटा फ़ील्ड के अंदर जो कुछ भी दिखाता है और पंक्तियों को गिनती है कि कितने अक्षरों हैं।ट्रांसफॉर्मिंग पांडस डेटाफ्रेम

import pandas as pd 

trans = pd.read_table('output.txt', header=None, index_col=0) 

print trans 
>>> 
     1 2 3 4 
0      
11  a b c NaN 
666  a d e NaN 
10101 b c d NaN 
1010 a b c d 
414147 b c NaN NaN 
10101 a b d NaN 
1242 d e NaN NaN 
101  a b c d 
411  c d e NaN 
444  a b c NaN 

बजाय मैं उत्पादन इस तरह रहना चाहता हूँ:

 a b c  d e 
0      
11  1 1 1 NaN NaN 
666  1 NaN NaN 1 1 

समारोह .stack() लगभग यह किया जाता है, लेकिन गलत प्रारूप में।

उत्तर

5

तुम भी get_dummies()

pd.get_dummies(df.unstack().dropna()).groupby(level=1).sum() 

परिणामों में पांडा इस्तेमाल कर सकते हैं:

 a b c d e 
0      
11  1 1 1 0 0 
666  1 0 0 1 1 
10101 0 1 1 1 0 
1010 1 1 1 1 0 
414147 0 1 1 0 0 
10101 1 1 0 1 0 
1242 0 0 0 1 1 
101  1 1 1 1 0 
411  0 0 1 1 1 
444  1 1 1 0 0 

आप NaN के साथ शून्य बदल सकते आप में चाहते हैं सेवा मेरे।

यह एक पंक्ति में थोड़ा अस्पष्ट है। df.unstack().dropna() मूल रूप से आपके डेटाफ्रेम को एक श्रृंखला में फ़्लैट करता है और अल NaN को छोड़ देता है। get_dummies अक्षरों की सभी घटनाओं की एक तालिका देता है, लेकिन अनस्टैक डेटाफ्रेम में प्रत्येक स्तर के लिए। समूह और योग फिर सूचकांक को मूल आकार में जोड़ते हैं।

+0

सुंदर से संस्करण 0.13 विकास संस्करण का उपयोग कर रहा हूं। Get_dummies डेटाफ्रेम पर काम करने के लिए मेरे (अब हटाए गए) प्रयास से काफी बेहतर है। वास्तव में '' unstack() ड्रॉपना() 'idiom की तरह। –

+0

मैंने देखा, आप इसे छोड़ सकते थे, कुछ विकल्प रखने में कोई हानि नहीं थी। मैं अभी भी आपकी पिछली टिप्पणी से सहमत हूं कि रोमन से 'पिवट' समाधान से इसकी कम सुंदर (और पठनीय) है। पिवट की अवधारणा भी बेहतर जानी जाती है, फिर ... 'get_dummies'। :) –

2

इस तरह कुछ हो सकता है:

>>> st = pd.DataFrame(trans.stack()).reset_index(level=0) 
>>> st.columns = ['i','c'] 
>>> st.pivot_table(rows='i', cols='c', aggfunc=len) 
c  a b c d e 
i       
11  1 1 1 NaN NaN 
101  1 1 1 1 NaN 
411 NaN NaN 1 1 1 
444  1 1 1 NaN NaN 
666  1 NaN NaN 1 1 
1010  1 1 1 1 NaN 
1242 NaN NaN NaN 1 1 
10101 1 2 1 2 NaN 
414147 NaN 1 1 NaN NaN 
+0

बंद लेकिन .reset_index (level = 0) एक त्रुटि देता है ValueError ('% s सम्मिलित नहीं कर सकता, पहले से मौजूद है'% आइटम) – user3084006

+1

पांडा का आप किस संस्करण का उपयोग करते हैं? –

+0

मैं 04-दिसंबर-2013 – user3084006

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