如果数据中不存在每个日期,如何计算 python 个日期的移动总和?

How to calculate a moving sum in python of dates if every date doesn't exist in the data?

我正在尝试根据休息日计算 Python 中的移动总和,但是我的数据框中没有列出每个日期。在下面的示例中,总和应说明数据框中缺少 2021-01-03 日期这一事实

import pandas as pd

df = pd.DataFrame({'date':['2021-01-01', '2021-01-02', '2021-01-04', '2021-01-05'],
                   'value':[1, 1, 1, 1]})

df_correct = pd.DataFrame({'date':['2021-01-01', '2021-01-02', '2021-01-04', '2021-01-05'],
                           'value':[1, 1, 1, 1],
                           '2_day_cum_sum':[1, 2, 1, 2]})

print(df_correct)

我知道如何使用 pandas 中的 rolling 函数计算滚动总和,但我不知道如何计算丢失的日期。我目前的愿景是创建一个数据框,其中包含日期和其他变量的所有组合(不是在这个基本示例中),然后将活动数据集合并到该数据框,这样我就可以有效地使用 rolling 函数来自 pandas。但是,我觉得存在更好的方法。有什么想法吗?

我知道你提到了滚动功能,不知道你是否知道你可以在滚动功能中指定一个日期window。让我们试试:

# ensure date is in right format
df['date'] = pd.to_datetime(df.date)

# set date as index
df = df.set_index('date')

# rolling sum with 2 days as window
df['2_day_cum_sum'] = df['value'].rolling('2d').sum()

# reset index
df = df.reset_index()

我能够得到您的预期输出,我认为这足以满足您的使用需求,除非您想在日期缺失时输入不同的值 - 例如如果缺少日期,则将值设置为 5。如果是这样,那么我们将需要一个不同的解决方案