累计总和,每隔一段时间刷新,以及

2024-10-04 07:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 数据时间总和锯齿jt2
2条回答
  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

假设您的数据帧包含:

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个小时

相关问题 更多 >