在groupby中的每条记录上显示组

时间:2017-06-02 16:02:08

标签: python pandas group-by

我正在使用pandas和groupby进行汇总。我正在做以下事情:

data = {'ac' : ['a','a','a','a','a','a','a','a','b','b','b','b','b'],
        'cls'   ['wwww','wwww','wwww','xxxx','xxxx','zzzz','zzzz','yyyy','wwww','xxxx','zzzz','zzzz','yyyy'],
        'pl' : [1,1,1,1,1,1,1,1,1,1,1,1,1]}

df = pd.DataFrame(data)

grouped = df.groupby(['ac','cls']).agg({'pl':np.sum})


           pl
    ac cls     
    a  wwww   3
       xxxx   2
       yyyy   1
       zzzz   2
    b  wwww   1
       xxxx   1
       yyyy   1
       zzzz   2

有没有办法groupby填写ac列,以便它显示如下?

             pl
    ac cls     
    a  wwww   3
    a  xxxx   2
    a  yyyy   1
    a  zzzz   2
    b  wwww   1
    b  xxxx   1
    b  yyyy   1
    b  zzzz   2

3 个答案:

答案 0 :(得分:3)

您想要重置索引:

import pandas as pd

import numpy as np

data = {'ac': ['a','a','a','a','a','a','a','a','b','b','b','b','b'],
        'cls': ['wwww','wwww','wwww','xxxx','xxxx','zzzz','zzzz','yyyy','wwww','xxxx','zzzz','zzzz','yyyy'],
        'pl': [1,1,1,1,1,1,1,1,1,1,1,1,1]}

df = pd.DataFrame(data)

grouped = df.groupby(['ac','cls']).agg({'pl':np.sum})
grouped.reset_index(inplace=True)

print grouped

打印:

  ac   cls  pl
0  a  wwww   3
1  a  xxxx   2
2  a  yyyy   1
3  a  zzzz   2
4  b  wwww   1
5  b  xxxx   1
6  b  yyyy   1
7  b  zzzz   2

答案 1 :(得分:2)

您清楚地显示左侧的项目位于索引中,如右侧列标题的位置所示。

这是通过名为display.multi_sparse的pandas选项控制的。您可以使用pd.set_option('display.multi_sparse', False)将其关闭,也可以使用pd.option_context

暂时关闭
with pd.option_context('display.multi_sparse', False):
    print(grouped)

         pl
ac cls     
a  wwww   3
a  xxxx   2
a  yyyy   1
a  zzzz   2
b  wwww   1
b  xxxx   1
b  yyyy   1
b  zzzz   2

答案 2 :(得分:0)

使用In [748]: df.groupby(['ac', 'cls'], as_index=False).agg({'pl': np.sum}) Out[748]: ac cls pl 0 a wwww 3 1 a xxxx 2 2 a yyyy 1 3 a zzzz 2 4 b wwww 1 5 b xxxx 1 6 b yyyy 1 7 b zzzz 2

{{1}}