基于时段填充列值:按10分钟重采样并从指定时间向后填充数据
基于时段填充列值:按10分钟重采样并从指定时间向后填充数据
我明白你想要实现的需求了——按10分钟间隔重采样数据,并且只在每天从06:00开始到对应记录时间的这段窗口内,用该记录的值填充,其余时段保留NaN。下面我来一步步教你用Pandas实现这个逻辑:
- 首先确保时间戳列是datetime类型并设置为索引,这是Pandas处理时间序列的基础:
import pandas as pd # 假设你的数据已经读入DataFrame df['timestamp'] = pd.to_datetime(df['timestamp']) df = df.set_index('timestamp')
- 生成覆盖所需时段的完整10分钟重采样时间序列,我们从最早记录日期的06:00开始,到最晚记录日期次日的06:00结束,保证所有需要的时段都被覆盖:
# 计算重采样的起始和结束时间 start_time = df.index.min().normalize() + pd.Timedelta(hours=6) end_time = df.index.max().normalize() + pd.Timedelta(days=1, hours=6) # 生成10分钟间隔的时间索引 resampled_index = pd.date_range(start=start_time, end=end_time, freq='10T') # 创建空的重采样DataFrame resampled_df = pd.DataFrame(index=resampled_index, columns=['col1'])
- 遍历每个原始数据点,精准填充对应的时间窗口:
对于每条记录,我们只填充当天06:00到该记录时间的最后一个10分钟整点之间的所有间隔,之后的时段保持NaN,完全匹配你想要的效果:
for idx, row in df.iterrows(): # 获取当前记录日期的06:00 day_start = idx.normalize() + pd.Timedelta(hours=6) # 获取记录时间的前一个10分钟整点(比如09:21:00对应09:20:00) last_interval = idx.floor('10T') # 只有当天06:00早于等于这个整点时才进行填充 if day_start <= last_interval: # 筛选出需要填充的时间范围 fill_mask = (resampled_df.index >= day_start) & (resampled_df.index <= last_interval) resampled_df.loc[fill_mask, 'col1'] = row['col1']
运行完这段代码后,resampled_df就是你想要的结果啦——每天从06:00开始用对应记录的值填充,直到该记录时间的前一个10分钟间隔,之后到次日06:00前都是NaN,下一条记录则从次日06:00开始重复这个逻辑。
备注:内容来源于stack exchange,提问作者prof32
相关产品推荐
相关产品推荐

