首页 > 解决方案 > 累积和,间隔刷新,python pandas

问题描述

我有一些带时间戳的数据,我想运行一个扩展的总和,它会刷新,比如说每天 7:00(从零重新开始),有点像“锯齿”总和。我怎么能在熊猫中做到这一点?非常感谢,JT2

标签: pythonpandasdataframedatetime

解决方案


  1. 最简单的情况是日期的groupby()floor("D")为了满足您的要求,在做地板前减去 7 小时
  2. 然后使用transform("cumsum")这样你就可以得到与原始数据帧相同基数的运行总数
  3. 显示了早上 6 点和早上 7 点的结果,您会看到总数正在重置
import pandas as pd
import random
df = pd.DataFrame([{'DATE':d, "value":random.randint(0,10)}
 for d in pd.date_range(start=datetime(2020,7,24),end=datetime(2020,7,30), freq="15min")])

df["cumsum"] = df.groupby((df["DATE"]-pd.Timestamp(1970,1,1,7)).dt.floor("D"))["value"].transform("cumsum")

df[df["DATE"].dt.hour.isin([6,7])][:15]

输出

               DATE  value  cumsum
2020-07-24 06:00:00      3     137
2020-07-24 06:15:00      0     137
2020-07-24 06:30:00      6     143
2020-07-24 06:45:00      7     150
2020-07-24 07:00:00      0       0
2020-07-24 07:15:00      3       3
2020-07-24 07:30:00     10      13
2020-07-24 07:45:00      5      18
2020-07-25 06:00:00      6     459
2020-07-25 06:15:00     10     469
2020-07-25 06:30:00      8     477
2020-07-25 06:45:00      8     485
2020-07-25 07:00:00      3       3
2020-07-25 07:15:00      4       7
2020-07-25 07:30:00      0       7

推荐阅读