python - 我的数据框有多重索引,如何计算一个级别的总和?
问题描述
大家好,我想根据 计算Violent_type
计数的总和year
。例如,计算violent_type
年的总计数2013
,即18728+121662+1035
。但是当有multiIndexes时我不知道如何选择数据。任何建议将被认真考虑。谢谢。
解决方案
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
'''
推荐阅读
- elasticsearch - 在具有特殊字符的自定义关键字字段上使用术语查询时出现意外结果
- python - 使用 Textblob 从文本中删除所有名词短语
- stackexchange-api - 如何通过 1 个调用从不同对象获取信息?
- javascript - 如何根据我的变量的范围选择通过 Ajax 更新价格?
- apache-spark - 是否可以使用 YARN 容量调度程序在 Spark 上运行 Hive?
- java - JTable 列的标题不会显示
- c# - Linq with EF core 2.2 Condition with where Clause FK and PK
- websocket - 在检查 android 应用程序的 api websocket 期间,charles 出现未知错误
- spring-boot - spring boot logback 刷新
- python - 如何更改导入超时限制(python2.7 和 oct2py)