首页 > 解决方案 > 我的数据框有多重索引,如何计算一个级别的总和?

问题描述

我的数据框

大家好,我想根据 计算Violent_type计数的总和year。例如,计算violent_type年的总计数2013,即18728+121662+1035。但是当有multiIndexes时我不知道如何选择数据。任何建议将被认真考虑。谢谢。

标签: pythondataframe

解决方案


pandas.DataFrame.groupby()中的level参数是您正在寻找的。

level int, level name, or sequence of such, default None

如果轴是 MultiIndex(分层),则按特定级别或多个级别分组。

要回答您的问题,您只需要:

df.groupby(level=[0, 1]).sum()
# or
df.groupby(level=['district', 'year']).sum()

看看效果

import pandas as pd

iterables = [['001', 'SST'], [2013, 2014], ['Dangerous', 'Non-Violent', 'Violent']]

index = pd.MultiIndex.from_product(iterables, names=['district', 'year', 'Violent_type'])

df = pd.DataFrame(list(range(0, len(index))), index=index, columns=['count'])

'''
print(df)

                            count
district year Violent_type       
001      2013 Dangerous         0
              Non-Violent       1
              Violent           2
         2014 Dangerous         3
              Non-Violent       4
              Violent           5
SST      2013 Dangerous         6
              Non-Violent       7
              Violent           8
         2014 Dangerous         9
              Non-Violent      10
              Violent          11
'''

print(df.groupby(level=[0, 1]).sum())

'''
               count
district year       
001      2013      3
         2014     12
SST      2013     21
         2014     30
'''

print(df.groupby(level=['district', 'year']).sum())

'''
               count
district year       
001      2013      3
         2014     12
SST      2013     21
         2014     30
'''

推荐阅读