2016-10-25 27 views
9

प्रश्न

को GroupBy वस्तु कन्वर्ट वहाँ दो प्रश्न हैं जो समान लग रहे हैं, लेकिन वे एक ही सवाल नहीं कर रहे हैं: here और here। वे GroupBy, जैसे count() या aggregate() की एक विधि को कॉल करते हैं, जो मुझे पता है कि DataFrame लौटाता है। मैं क्या पूछ रहा हूं कि GroupBy (वर्ग pandas.core.groupby.DataFrameGroupBy) को अपने आप को DataFrame में परिवर्तित करने का तरीका है। मैं नीचे बताऊंगा।अजगर पांडा DataFrame

उदाहरण

इस प्रकार एक उदाहरण DataFrame का निर्माण।

data_list = [] 
for name in ["sasha", "asa"]: 
    for take in ["one", "two"]: 
     row = {"name": name, "take": take, "score": numpy.random.rand(), "ping": numpy.random.randint(10, 100)} 
     data_list.append(row) 
data = pandas.DataFrame(data_list) 

ऊपर DataFrame निम्नलिखित की तरह (के साथ अलग अलग संख्या स्पष्ट रूप से) दिखना चाहिए।

name ping  score take 
0 sasha 72 0.923263 one 
1 sasha 14 0.724720 two 
2 asa 76 0.774320 one 
3 asa 71 0.128721 two 

मुझे क्या करना चाहते हैं कॉलम "नाम" द्वारा समूह के लिए है और इसलिए है कि मैं एक DataFrame multiindex कॉलम "नाम" का निर्माण किया द्वारा अनुक्रमित प्राप्त कर सकते हैं "ले" (इसी क्रम में), और नीचे की तरह "ले लो"।

   score ping 
name take   
sasha one 0.923263 72 
     two 0.724720 14 
    asa one 0.774320 76 
     two 0.128721 71 

मैं इसे कैसे प्राप्त करूं? अगर मैं grouped = data.groupby(["name", "take"]) करता हूं, तो grouped एक pandas.core.groupby.DataFrameGroupBy उदाहरण है। मैं grouped को DataFrame उदाहरण में कैसे परिवर्तित करूं?

उत्तर

7

आप set_index की जरूरत है:

data = data.set_index(['name','take']) 
print (data) 
      ping  score 
name take     
sasha one  46 0.509177 
     two  77 0.828984 
asa one  51 0.637451 
     two  51 0.658616 
+0

Oooooh !!!! Riiiiiight !!!!! ठीक है, मैं इस जवाब को 9 मिनट में स्वीकार करूंगा जब स्टैक ओवरफ़्लो मुझे देता है। धन्यवाद। – Ray

+0

जब मैं इस उत्तर का उपयोग करने का प्रयास करता हूं, तो मुझे 'विशेषता' त्रुटि मिलती है। "डेटाफ्रेम ग्रुपबी 'ऑब्जेक्ट्स के कॉल करने योग्य विशेषता' set_index 'तक नहीं पहुंच सकता है,' लागू करें 'विधि का उपयोग करने का प्रयास करें" – Nate

+1

@Nate - ऐसा लगता है कि' डेटा' 'डेटाफ्रेम' नहीं है, लेकिन समूहबी का आउटपुट - इसलिए 'g = df.groupby की आवश्यकता है ('col') 'और फिर 'g.apply (lambda x: x [' col1 ']। set_index())' – jezrael