2016-10-25 13 views
9

Soru

için GroupBy nesneyi dönüştürün. Her ikisi de DataFrame döndürdüğünü bildiğim count() veya aggregate() gibi GroupBy yöntemini kullanır. Ne soruyorum GroupBy (sınıf pandas.core.groupby.DataFrameGroupBy) nesnesinin kendisini bir DataFrame'a dönüştürmek. Aşağıda göstereceğim. aşağıdaki gibi Python Pandalar Orada benzer iki soru vardır ancak bunlar aynı soruyu değiliz DataFrame

Örnek örnek DataFrame oluşturun.
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) 

yukarıdaki DataFrame

(besbelli farklı numaralar) Aşağıdaki gibi görünmelidir.

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 

Ne yapmak istiyorum ben sütunları "isim" inşa multiindex tarafından dizine bir DataFrame alabilmeleri, (bu sırayla) "almak" sütunlarında "adı," grubuna ve ve "al", aşağıdakine benzer.

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

Bunu nasıl başarabilirim? grouped = data.groupby(["name", "take"]) yaparsam, grouped bir pandas.core.groupby.DataFrameGroupBy örneğidir. grouped'u DataFrame örneğine nasıl dönüştürebilirim?

cevap

7

Sen set_index gerekir:

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 !!!!! OK Stack Overflow bana izin verdiğinde bu cevabı 9 dakika içinde kabul ediyorum. Teşekkür ederim. – Ray

+0

Bu yanıtı kullanmaya çalıştığımda, bir "AttributeError" alıyorum. "DataFrameGroupBy" nesnesinin "set_index" callable özniteliğine erişilemiyor, 'apply' yöntemini kullanmayı deneyin. " – Nate

+1

@Nate - Veri" DataFrame "değil, groupby çıktı - yani g = df.groupby ('col') 've sonra g.apply (lambda x: x ['col1']. set_index())' – jezrael