python - 在 Python 中使用 Pandas Groupby 按系列中的标签分组
问题描述
可能是一个非常初学者的问题,但只是学习如何在 Python 中使用 Pandas。我想使用包含不在数据集中的组的 Pandas 执行 groupby。假设我有以下数据:
State Year Number
Alabama 2010 2
Texas 2013 1
Mississippi 2011 6
Florida 2010 4
Alabama 2012 1
Texas 2010 8
Mississippi 2019 5
Florida 2017 3
我想使用 groupby 按州对数字求和,然后按年求和,但我想包括所有 50 个州(所以在这个例子中我会有很多零)。
我可以只使用数据框中包含的状态来做到这一点,没有问题:
grouped = df.groupby(['State', 'Year'])['Number'].sum()
但是,如果我尝试按一个系列进行分组,我将拥有所有 50 个州的名称,如下所示:
states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Northern Mariana Islands', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']
grouped = df.groupby([states, 'Year'])['Number'].sum()
我遇到了问题。有什么简单的方法可以做到这一点吗?
解决方案
您基本上是在寻找reindex
. 但是,reindex
不适用于 MultiIndex。您可以unstack
:stack
grouped = df.groupby(['State','Year']).sum()
grouped.unstack('Year', fill_value=0).reindex(states, fill_value=0).stack()
或者将它们链接在一起:
(df.groupby(['State','Year']).sum()
.unstack('Year', fill_value=0)
.reindex(states, fill_value=0)
.stack()
)
输出:
Number
State Year
Alabama 2010 2
2011 0
2012 1
2013 0
2017 0
... ...
Wyoming 2011 0
2012 0
2013 0
2017 0
2019 0
推荐阅读
- java - 每次用户连接到互联网时运行工作者
- python - SQLAlchemy 自定义基类自动运行 __init__
- python - CRUD 与烧瓶菜鸟错误
- java - 无法将 .gitignore 文件从一个目录移动到另一个目录
- typescript - 尝试在 Angular Jasmine 测试中模拟链式方法时出错
- c - 哪个字符串最长
- javascript - 页面不活动,怎么做一个窗口?
- python - 如何使用 python 从节点缓冲区中选择消息?
- fiware-orion - Fiware Orion-LD 自动增量实体 ID
- spring-batch - 如何在 UI 上查看 Spring Batch 的详细信息?