我有一些带有时间戳的数据,我想运行一个扩展的总和,该总和将刷新,例如每天的7:00(从零开始),有点像“锯齿”总和。 如何在熊猫中做到这一点? 非常感谢你, JT2
答案 0 :(得分:0)
groupby()
日期的floor("D")
。为了满足您的要求,请减去7个小时再进行发言transform("cumsum")
,以便获得与原始数据帧基数相同的运行总计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个小时。