你如何对具有多级索引的pandas系列进行分组和总结?

时间:2016-03-23 19:35:27

标签: python pandas

我有一个名为busyness的Series对象,它是从DataFrames以下列方式创建的:

entries = last.ENTRIES - first.ENTRIES
exits   = last.EXITS   - first.EXITS
busyness = entries + exits

其中lastfirst是带有ENTRIES列的数据框。以下是busyness的样子:

ipdb> type(busyness)
<class 'pandas.core.series.Series'>

ipdb> busyness.head(20)
CA    UNIT  SCP       STATION
A002  R051  02-00-00  59 ST         2468
            02-00-01  59 ST         1764
            02-03-00  59 ST         3063
            02-03-01  59 ST         3952
            02-03-02  59 ST         3576
            02-03-03  59 ST         3168
            02-03-04  59 ST         2563
            02-03-05  59 ST         2948
            02-03-06  59 ST         2350
            02-05-00  59 ST            0
            02-05-01  59 ST            0
            02-06-00  59 ST         2503
A006  R079  00-00-00  5 AV/59 ST    4321
            00-00-01  5 AV/59 ST    2407
            00-00-02  5 AV/59 ST    1687
            00-00-03  5 AV/59 ST    1272
            00-00-04  5 AV/59 ST    1352
            00-03-00  5 AV/59 ST    1834
            00-03-01  5 AV/59 ST    2753
            00-03-02  5 AV/59 ST    4192
dtype: int64

我需要执行聚合,类似于以下内容:

ipdb> busyness.groupby('STATION').sum()
*** KeyError: 'STATION'

如何使用Series对象执行此操作。我以前常常处理DataFrames。感谢您提供任何帮助!

3 个答案:

答案 0 :(得分:2)

由于MultiIndex级别具有名称,因此您可以在调用groupby时按名称指定级别:

busyness.groupby(level='STATION').sum()

答案 1 :(得分:0)

由于我们有多级索引,因此在构建reset_index时需要调用DataFrame,如下所示:

ipdb> import pandas as pd
ipdb> df = pd.DataFrame(busyness).reset_index()
ipdb> summed = df.groupby('STATION').sum()
ipdb> summed.head()
                   0
STATION
1 AV           48949
103 ST         51262
103 ST-CORONA  32165
104 ST          5612
110 ST         21252

答案 2 :(得分:0)

您可以使用groupbyMultiindex级别python0开始,level=3}:

summed = df.groupby(level=3).sum()