如何在Pandas中将分组时间范围扩展至00:00:00至23:59:59?
扩展Pandas 5分钟分组的时间范围至全天(00:00:00-23:59:59)
原代码仅会保留包含数据的5分钟区间,要覆盖全天所有5分钟时段,需要先生成当天完整的时间区间序列,再将分组结果与之合并并填充缺失值。以下是修改后的代码:
import pandas as pd # 原始数据 data = {"datetime" : ["2022-10-26 07:12:13", "2022-10-26 09:14:43", "2022-10-26 17:25:19"], "value" : [1, 3, 5]} df = pd.DataFrame(data) df["time"] = pd.to_datetime(df["datetime"]) # 按5分钟分组求和 grouped_df = ( df.groupby([pd.Grouper(freq="5Min", key="time")])["value"] .sum() .reset_index(name="value") ) # 生成当天完整的5分钟时间序列(从00:00到23:55) date = df["time"].dt.date.iloc[0] full_time_range = pd.date_range( start=f"{date} 00:00:00", end=f"{date} 23:55:00", freq="5Min" ) full_df = pd.DataFrame({"interval start": full_time_range}) # 合并分组结果与完整时间序列,缺失值填充为0 df = full_df.merge(grouped_df, left_on="interval start", right_on="time", how="left") df["value"] = df["value"].fillna(0).astype(int) df = df.drop(columns="time") # 添加区间结束时间 df.insert(1, "interval end", df["interval start"] + pd.Timedelta("5Min"))
关键修改说明:
- 生成完整时间序列:通过
pd.date_range创建当天从00:00到23:55的所有5分钟起始时间,确保覆盖全天每一个5分钟区间。 - 合并与填充:使用左连接将分组结果与完整时间序列合并,没有数据的区间将
value填充为0,保证每个时段都有记录。 - 类型转换:将填充后的
value转为整数,保持数据类型一致性。
内容的提问来源于stack exchange,提问作者vojtam
相关产品推荐
相关产品推荐

