【问题标题】:Group by Labels in a Series using Pandas Groupby in Python在 Python 中使用 Pandas Groupby 按系列中的标签分组
【发布时间】:2020-05-05 02:38:06
【问题描述】:

可能是一个非常初学者的问题,但只是学习如何在 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()

我遇到了问题。有什么简单的方法吗?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您基本上是在寻找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
    

    【讨论】:

      【解决方案2】:
      1. 从您的状态列表中创建索引。 (idx = pd.index(states])
      2. grouped.set_index( idx, inplace=True)
      3. grouped.fillna(value=0, inplace=True)

      【讨论】:

        猜你喜欢
        • 2017-03-18
        • 2021-01-22
        • 2021-12-16
        • 1970-01-01
        • 2022-01-23
        • 2019-08-03
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多