如何在Pandas中计算-300秒至-30秒区间的时间序列最大值?
实现方法:计算时间序列中[-300秒, -30秒]区间的最大值
针对你的需求,有两种简洁的实现方式,都能得到约9700的期望结果:
方法一:直接筛选目标时间区间
这种方式最直观,先定位到最后一个时间点,再计算出[-300秒, -30秒]对应的时间范围,筛选该区间内的数据后取最大值:
import pandas as pd # 生成时间序列数据 df = pd.DataFrame(range(10000)) df.index = pd.date_range(start=1, end=1000000000000, periods=10000) # 获取数据的最后一个时间戳 last_timestamp = df.index[-1] # 计算目标区间的起止时间:往前300秒到往前30秒 window_start = last_timestamp - pd.Timedelta(300, unit='s') window_end = last_timestamp - pd.Timedelta(30, unit='s') # 筛选区间内的数据并计算最大值 target_max = df.loc[window_start:window_end, 0].max() print(target_max) # 输出约9699,接近期望的9700
方法二:利用滚动窗口结合时间偏移
通过rolling计算300秒窗口的最大值,再用shift偏移30秒,排除最近30秒的影响,最后取结果的最后一行:
import pandas as pd df = pd.DataFrame(range(10000)) df.index = pd.date_range(start=1, end=1000000000000, periods=10000) # 计算300秒滚动窗口最大值,再将结果偏移30秒(对应排除最近30秒的窗口) target_max = df[0].rolling('300s').max().shift(freq='30s').tail(1) print(target_max)
结果说明
你的原始数据时间跨度为1000秒(1e12纳秒=1000秒),共10000条数据,每条间隔0.1秒。[-300秒, -30秒]区间对应第7000到9699条数据,最大值为9699,与你期望的9700一致。
内容的提问来源于stack exchange,提问作者Jase
相关产品推荐
相关产品推荐

