gpt4 book ai didi

python - 如何根据列的数据对时间序列进行重新采样/重新索引/分组?

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:13 27 4
gpt4 key购买 nike

所以我有一个 pandas 数据框,其中包含 1 秒分辨率下的 2 个用水值。值为“hotIn”和“hotOut”。 hotIn 可以以一秒的分辨率记录低至十分之一加仑,而 hotOut 记录代表一加仑的整数脉冲,即当脉冲发生时,一加仑已经通过仪表。脉冲大约每 14-15 秒发生一次。

数据大概是这样的:

Index                       hotIn(gpm)      hotOut(pulse=1gal) 
2019-03-23T00:00:00 4 0
2019-03-23T00:00:01 5 0
2019-03-23T00:00:02 4 0
2019-03-23T00:00:03 4 0
2019-03-23T00:00:04 3 0
2019-03-23T00:00:05 4 1
2019-03-23T00:00:06 4 0
2019-03-23T00:00:07 5 0
2019-03-23T00:00:08 3 0
2019-03-23T00:00:09 3 0
2019-03-23T00:00:10 4 0
2019-03-23T00:00:11 4 0
2019-03-23T00:00:12 5 0
2019-03-23T00:00:13 5 1

我正在尝试做的是根据脉冲的出现对数据帧重新采样或重新索引,并对新时间戳之间的 hotIn 求和。

例如,对 00:00:00 - 00:00:05 和 00:00:06 - 00:00:13 之间的 hotIn 求和。

理想情况下,结果应该是这样的:

Index                       hotIn sum(gpm)      hotOut(pulse=1gal) 
2019-03-23T00:00:05 24 1
2019-03-23T00:00:13 32 1

我探索了使用两步 for-elif 循环来检查 hotOut == 1 是否有效,但在大型数据集上速度非常慢。如果可能的话,我很肯定 Pandas 的时间戳功能会更好。我也不能简单地在设定频率上重新采样,因为脉冲之间的间隔会定期变化。主要问题是脉冲变化之间的时间戳周期,因此一般的重采样规则将不起作用。在提取与脉冲相关的时间戳并将它们作为新索引应用到 main 时,我也遇到了匹配数据帧长度的问题。

最佳答案

IIUC,你可以这样做:

s = df['hotOut(pulse=1gal)'].shift().ne(0).cumsum()
(df.groupby(s)
.agg({'Index':'last', 'hotIn(gpm)':'sum'})
.reset_index(drop=True)
)

输出:

                 Index  hotIn(gpm)
0 2019-03-23T00:00:05 24
1 2019-03-23T00:00:13 33

关于python - 如何根据列的数据对时间序列进行重新采样/重新索引/分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com