如何在多个列上使用分组依据?

2024-04-25 17:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用panda进行一些数据处理,我的panda语句如下所示

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

当我把它转换成dataframe时,我只得到两列复合键和计数。我想要的是,三列

year, Tm, Size

如何将groupby之后的两个复合键分开?你知道吗


Tags: 数据size语句yearpanda数据处理tmgroupby
2条回答

在groupby语句中指定as_index=False。作为补充说明,您可能希望使用count(不包括nan)而不是size。你知道吗

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

对于大小:

Another simple aggregation example is to compute the size of each group. This is included in GroupBy as the size method. It returns a Series whose index are the group names and whose values are the sizes of each group.

对于计数:

Compute count of group, excluding missing values

我想您可以用参数name尝试^{}作为新列名Size

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 

相关问题 更多 >