累计总和,每隔一段时间刷新一次,python熊猫

时间:2020-07-28 06:38:51

标签: python pandas dataframe datetime

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

2 个答案:

答案 0 :(得分:0)

  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

答案 1 :(得分:0)

假设您的DataFrame包含:

Dat               Amount
2020-07-01 10:00   10.0
2020-07-02 06:50    3.1
2020-07-02 07:00    1.0
2020-07-02 08:10    2.1
2020-07-03 05:00    3.2
2020-07-03 10:00   12.0
2020-07-03 13:10    8.0

要执行分组和扩展总和,可以运行:

df.groupby(pd.Grouper(key='Dat', freq='24H', base=7)).Amount.expanding().sum()

对于上述数据示例,结果为:

Dat                   
2020-07-01 07:00:00  0    10.0
                     1    13.1
2020-07-02 07:00:00  2     1.0
                     3     3.1
                     4     6.3
2020-07-03 07:00:00  5    12.0
                     6    20.0
Name: Amount, dtype: float64

您按 24小时时间段(天)进行分组,但基本会发生变化 一天的开始时间只有7个小时。