我有一个类似于下面的数据框,我想计算 value
的总和过去 7 天的列。问题是不一定每天都有一行。
df = pd.DataFrame({
'value': [2,3,7,14],
'date': ['10/20/2005','10/22/2005','10/25/2005','10/27/2005']
})
df['date'] = pd.to_datetime(df['date'])
df
value date
2 2005-10-20
3 2005-10-22
7 2005-10-25
14 2005-10-27
我想要的是类似的东西 df['value'].sum('Last 7 days')
26
我发现的问题的解决方案总是使用缺少的日期填充 df,使用 .asfreq()
或 .reindex()
.不幸的是,这对我来说不是一个选择,因为我有太多的类,每个类都用 df 表示,就像上面的那样。因此,用缺失的日期填充 df 会创建成千上万的额外行。有没有办法使用
pd.Timedelta()
(或类似),我可以在哪里将丢失的天数视为零?
最佳答案
滚动将此智能内置到基于日期时间的列的函数中:
df.rolling('7d', on='date').sum()
请注意,10/27 和 10/20 相隔 8 天而不是 7 天 :)如果你想把它放到另一列:
df['sum'] = df.rolling('7d', on='date').sum()['value']
如果您只想要最终值:df.rolling('7d', on='date').sum()['value'].iloc[-1]
关于python - 基于日期时间值(缺少日期)在数据框中进行计算,而不用空日期填充数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392107/