【问题标题】:Resample dataframe quarterly but using different end months每季度重新采样数据框,但使用不同的结束月份
【发布时间】:2019-03-25 09:29:12
【问题描述】:

我想在我的数据框中对每个月的数据求和,但要在该季度的每个月中累积总和。所以输入是:

Index          Data
2017-02-05     10
2017-03-04     20
2017-06-20     40

这段代码在下面工作:

cum_df = monthly_df.groupby(by=[monthly_df.index.quarter, monthly_df.index.year]).cumsum()

输出如下:

Index         Data
2017-02-28    10
2017-03-31    30
2017-04-31    0
2017-05-31    0
2017-06-30    40

但是,我不希望季度在 3 月/6 月/9 月/12 月结束,而是像 2 月/5 月/8 月/11 月这样的自定义季度结束。如何更改我的代码以适用于自定义季度结束?

【问题讨论】:

  • 请分享示例输入和预期输出。
  • 更新显示输入和输出。谢谢!

标签: python pandas pandas-groupby


【解决方案1】:

使用pd.Grouper(freq='anchored_offset'),其中anchored_offset 是文档中所需的“锚定偏移”字符串:https://pandas.pydata.org/pandas-docs/stable/timeseries.html#anchored-offsets

例子:

df = pd.DataFrame(index=pd.date_range(start='2017-02-01', end='2018-1-31', freq='W'))

# Label each Sunday with a 1
df[0] = 1

# Group by quarter with year ending in November ('Q-NOV'), but label each quarter
# with its start date ('QS-NOV')
df.groupby(pd.Grouper(freq='QS-NOV')).sum()

             0
2017-02-01  13
2017-05-01  13
2017-08-01  13
2017-11-01  13

【讨论】:

  • 谢谢!我认为 freq='S-NOV' 而不是 'QS-NOV',否则效果很好
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 2021-05-17
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多