簡體   English   中英

列的MultiLevel索引:將value_counts作為pandas中的列

[英]MultiLevel index to columns : getting value_counts as columns in pandas

在一般意義上,我要解決的問題是將多級索引的一個組件更改為列。 也就是說,我有一個包含多級索引的Series ,我希望將索引的最低級別更改為dataframe列。 這是我想要解決的實際示例問題,

在這里我們可以生成一些示例數據:

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
...

現在,我可以組合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()]

我想你想要:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM