【问题标题】:Pandas: Aggregate by month for every subgroupPandas:按月汇总每个子组
【发布时间】:2015-04-03 07:38:13
【问题描述】:

我有以下pandas 表

                          TUFNWGTP  TELFS  t070101  t070102  t070103  t070104  \
TUDIARYDATE status                                                              
2003-01-03  emp     8155462.672158      2        0        0        0        0   
2003-01-04  emp     1735322.527819      1        0        0        0        0   
            emp     3830527.482672      2       60        0        0        0   
2003-01-02  unemp   6622022.995205      4        0        0        0        0   
2003-01-09  emp     3068387.344956      1        0        0        0        0

我想将每日数据汇总为每月数据,每个子组。

也就是说,如果没有status 子索引,我会这样做

df.resample('M', how='sum')

如何对每个子组进行每月汇总?

【问题讨论】:

    标签: python pandas resampling


    【解决方案1】:

    我认为您需要有一个 DatetimeIndex(而不是 MultiIndex):

    In [11]: df1 = df.reset_index('status')
    
    In [12]: df1
    Out[12]:
                status        TUFNWGTP  TELFS  t070101  t070102  t070103  t070104
    TUDIARYDATE
    2003-01-03     emp  8155462.672158      2        0        0        0        0
    2003-01-04     emp  1735322.527819      1        0        0        0        0
    2003-01-04     emp  3830527.482672      2       60        0        0        0
    2003-01-02   unemp  6622022.995205      4        0        0        0        0
    2003-01-09     emp  3068387.344956      1        0        0        0        0
    

    然后使用每月一次的 TimeGrouper 进行分组和状态列:

    In [13]: df1.groupby([pd.TimeGrouper('M'), 'status']).sum()
    Out[13]:
                               TUFNWGTP  TELFS  t070101  t070102  t070103  t070104
    TUDIARYDATE status
    2003-01-31  emp     16789700.027605      6       60        0        0        0
                unemp    6622022.995205      4        0        0        0        0
    

    【讨论】:

    • pd.TimeGrouper() 在 pandas v0.21.0 中被正式弃用,取而代之的是 pd.Grouper()。当前语法为:df1.groupby([pd.Grouper(freq='M'), 'status']).sum()
    猜你喜欢
    • 2016-07-19
    • 2020-01-08
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多