2012-08-15 27 views
6

從一般意義上說,我期望解決的問題是將多級索引的一個組件更改爲列。也就是說,我有一個Series,它包含一個多級索引,我希望索引的最低級別更改爲dataframe中的列。這裏是實際例子問題我想解決,MultiLevel index to columns:將value_counts獲取爲pandas中的列

在這裏我們可以生成一些樣本數據:

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() 

這給了我們,

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

現在,我可以GROUPBY bar並獲得foo字段的值value_counts,

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

並輸出,

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 

但我想是這樣,

  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 

我的解決辦法是寫以下位:

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()] 

回答

9

我想你想:

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

THANK YOU! 'unpack'在哪裏隱藏? – milkypostman 2012-08-15 15:47:28

相關問題