gpt4 book ai didi

python - 在 Python 中使用 Pandas Groupby 按系列中的标签分组

转载 作者:行者123 更新时间:2023-12-04 04:11:48 33 4
gpt4 key购买 nike

可能是一个非常新手的问题,但只是学习如何在 Python 中使用 Pandas。我想使用包含不在数据集中的组的 Pandas 执行分组。假设我有以下数据:

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。您可以unstackstack:

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

关于python - 在 Python 中使用 Pandas Groupby 按系列中的标签分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61599007/

33 4 0