如何在Pandas DataFrame中按15分钟时间粒度复制数值?
实现Pandas DataFrame数值按15分钟间隔复制的解决方案
你的需求是将原DataFrame中每个value值对应到4个15分钟间隔的时间戳(如00:00、00:15、00:30、00:45共用同一个数值),原代码使用interpolate()会做线性插值而非直接复制原值,因此无法达到效果。以下两种方法可以实现需求:
方法一:使用resample + 前向填充(ffill)
这种方法适合原始时间戳按小时(或更长间隔)排列的场景,通过重采样生成15分钟间隔序列,再将原始值向前填充3次(覆盖自身+后续3个15分钟点):
import pandas as pd # 处理时间戳格式 df['timestamp'] = pd.to_datetime(df['timestamp'], format='%d.%m.%Y %H:%M') # 设置时间索引,重采样为15分钟间隔,前向填充3次 df_result = df.set_index('timestamp').resample('15T').ffill(limit=3).reset_index()
方法二:手动重复行并生成时间偏移
如果需要更灵活控制时间序列,可以先将每行数据重复4次,再为每行添加对应的分钟偏移:
import pandas as pd # 处理时间戳格式 df['timestamp'] = pd.to_datetime(df['timestamp'], format='%d.%m.%Y %H:%M') # 重复每行4次 df_repeated = df.loc[df.index.repeat(4)].reset_index(drop=True) # 为每组重复行添加0、15、30、45分钟的偏移 df_repeated['timestamp'] = df_repeated['timestamp'] + pd.to_timedelta(df_repeated.groupby(df_repeated.index // 4).cumcount() * 15, unit='m')
原代码问题说明
你之前使用asfreq('15T')会生成15分钟间隔的时间序列,但中间缺失的value会被设为NaN,而interpolate()默认是线性插值,会计算相邻数值的中间值,并非直接复制原始值,因此不符合你的需求。
内容的提问来源于stack exchange,提问作者PeterBe
相关产品推荐
相关产品推荐

