如何在多列上使用分组?

时间:2016-02-27 15:59:32

标签: python pandas

我正在使用pandas进行一些数据处理,我的熊猫语句看起来像这样

yearage.groupby(['year', 'Tm']).size()

它给我这样的数据

2014  ATL     9
      BOS     9
      BRK     7
      CHI    10
      CHO     9
      CLE     8
      DAL     9
      DEN     8
      DET     9
      GSW     8

当我将其转换为数据帧时,我只得到两列复合键和计数。我真正想要的是,三列,

year, Tm, Size

如何在groupby之后分离出两个复合键?

2 个答案:

答案 0 :(得分:3)

您在groupby语句中指定as_index=False。作为旁注,您可能希望使用count(不包括NaN)而不是大小。

>>> df.groupby(['year', 'Tm'], as_index=False).count()
   year   Tm  a
0  2014  ATL  4
1  2014  BOS  4
2  2014  BRK  1
3  2014  CHI  1
4  2014  CHO  1
5  2014  CLE  1
6  2014  DAL  1
7  2014  DEN  1
8  2014  DET  1
9  2014  GSW  1

尺寸:

  

另一个简单的聚合示例是计算每个组的大小。这包含在GroupBy中作为size方法。它返回一个Series,其索引是组名,其值是每个组的大小。

对于计数:

  

计算组的计数,不包括缺失值

答案 1 :(得分:2)

我认为您可以使用参数name为新列名Size试用reset_index

yearage.groupby(['year','Tm']).size().reset_index(name='Size')

样品:

print yearage
    year   Tm   a
0   2014  ATL   9
1   2014  ATL   9
2   2014  ATL   9
3   2014  ATL   9
4   2014  BOS   9
5   2014  BRK   7
6   2014  BOS   9
7   2014  BOS   9
8   2014  BOS   9
9   2014  CHI  10
10  2014  CHO   9
11  2014  CLE   8
12  2014  DAL   9
13  2014  DEN   8
14  2014  DET   9
15  2014  GSW   8

print yearage.groupby(['year','Tm']).size().reset_index(name='Size')
   year   Tm  Size
0  2014  ATL     4
1  2014  BOS     4
2  2014  BRK     1
3  2014  CHI     1
4  2014  CHO     1
5  2014  CLE     1
6  2014  DAL     1
7  2014  DEN     1
8  2014  DET     1
9  2014  GSW     1

如果没有参数name,请获取新列0

print yearage.groupby(['year','Tm']).size().reset_index()
   year   Tm  0
0  2014  ATL  4
1  2014  BOS  4
2  2014  BRK  1
3  2014  CHI  1
4  2014  CHO  1
5  2014  CLE  1
6  2014  DAL  1
7  2014  DEN  1
8  2014  DET  1
9  2014  GSW  1