2012-08-15 4 views
6

In einem sehr allgemeinen Sinne, das Problem, das ich zu lösen suche, ändert eine Komponente eines mehrstufigen Index in Spalten. Das heißt, ich habe eine Series, die einen Multilevel-Index enthält und ich möchte die niedrigste Ebene des Index in Spalten in einer dataframe geändert. Hier ist die tatsächlichen Beispiel Problem Ich versuche zu lösen,MultiLevel-Index zu Spalten: Wert_Zählungen als Spalten in Pandas erhalten

Hier können wir einige Beispieldaten erzeugen:

foo_choices = ["saul", "walter", "jessee"] 
bar_choices = ["alpha", "beta", "foxtrot", "gamma", "hotel", "yankee"] 

df = DataFrame([{"foo":random.choice(foo_choices), 
       "bar":random.choice(bar_choices)} for _ in range(20)]) 
df.head() 

, die uns gibt,

 bar  foo 
0 beta jessee 
1 gamma jessee 
2 hotel saul 
3 yankee walter 
4 yankee jessee 
... 

Jetzt kann ich GROUPBY bar und erhalten value_counts des foo Felds,

und es gibt,

foo    
jessee hotel  4 
     gamma  2 
     yankee  1 
saul foxtrot 3 
     hotel  2 
     gamma  1 
     alpha  1 
walter hotel  2 
     gamma  2 
     foxtrot 1 
     beta  1 

Aber was ich will, ist so etwas wie,

  hotel beta foxtrot alpha gamma yankee 
foo       
jessee  1  1  5   4  1  1 
saul  0  3  0   0  1  0 
walter  1  0  0   1  1  0 

Meine Lösung war die folgende Bit zu schreiben:

for v in df['bar'].unique(): 
    if v is np.nan: continue 
    df[v] = np.nan 
    df.ix[df['bar'] == v, v] = 1 

dfgb = df.groupby('foo') 
dfgb.count()[df['bar'].unique()] 

Antwort

9

Ich glaube, Sie wollen:

dfgb['bar'].value_counts().unstack().fillna(0.) 
+0

DANKE SIE! Wo hat sich "entstapeln" versteckt ??? – milkypostman