首页 > 解决方案 > 是否可以使重新采样中的移动窗口从最近的日期开始?

问题描述

我在 Pandas 数据框中有以下数据集:

   id       date  value
    1  2019-01-31     10
    1  2019-02-28     15
    1  2019-03-31      8
    2  2019-01-31     20
    2  2019-03-31     10

假设我想计算每个 id两个月的累积总和,同时考虑数据中的差距(例如缺失的月份)。在示例中,每个 id 的起点应该是最近的日期:2019-03-31。

期望的结果是

   id       date  value
    1  2019-03-31     23
    2  2019-03-31     10

我写的代码试图做到这一点是

df.set_index('date').groupby('id')['value'].resample('2M').sum()

这使

                value
id date
1   2019-01-31    10
    2019-03-31    23
2   2019-01-31    20
    2019-03-31    10

当我尝试获取三个月的累积总和时我得到的结果如下:

df.set_index('date').groupby('id')['value'].resample('3M').sum()

                value
id date
1   2019-01-31    10
    2019-04-30    23
2   2019-01-31    20
    2019-04-30    10

预期结果应该在哪里

                value
id date
1   2019-03-31    33
2   2019-03-31    30

关于如何实现这一点的任何想法?

熊猫版本:'0.25.1'

标签: pythonpandas

解决方案


正如user3483203使用所建议的那样closed='left'。把它放在这里以便您可以关闭问题(请让 user3483203 输入他的建议作为答案,以便您接受它)

df.set_index('date').groupby('id')['value'].resample('3M',closed='left').sum().reset_index(name='value')

输出

id  date        value
1   2019-04-30  33
2   2019-04-30  30

推荐阅读