多级索引列:让value_counts在大熊猫列(MultiLevel index to colum

2019-07-31 00:46发布

在非常普遍的意义,我期待解决的问题是改变一个多层次的指数的一个组成部分成列。 也就是说,我有一个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
...

现在,我可以GROUPBY bar ,并得到的value_counts foo领域,

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

Answer 1:

我想你想:

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


文章来源: MultiLevel index to columns : getting value_counts as columns in pandas