首页 > 解决方案 > 如果数据中不存在每个日期,如何计算日期 python 中的移动总和?

问题描述

我正在尝试根据休息日计算 Python 中的移动总和,但是我的数据框中没有列出每个日期。在下面的示例中,cum sum 应说明数据框中缺少 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 的滚动函数计算滚动总和,但我不知道如何解释丢失的日期。我目前的愿景是创建一个包含日期和其他变量的每个组合的数据框(不在这个基本示例中),然后将活动数据集合并到该数据框,这样我就可以有效地使用 pandas 的滚动功能。但是,我觉得存在更好的方法。有什么想法吗?

标签: pythonrolling-sum

解决方案


我知道您提到了滚动功能,不确定您是否知道可以在滚动功能中指定日期窗口。让我们试试:

# 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。如果是这样,那么我们将需要一个不同的解决方案


推荐阅读