如何对pandas DataFrame按15分钟区间分组并覆盖全天所有时段
解决方法
你可以通过生成当日全量15分钟时间索引,再把分组求和结果重索引的方式实现需求,完整代码如下:
import pandas as pd # 1. 先确保time列为datetime格式 df['time'] = pd.to_datetime(df['time']) # 2. 按15分钟分组求和 grouped_sum = df.groupby(pd.Grouper(key="time", freq="15Min"))['Q'].sum() # 3. 生成当日完整的15分钟时间序列 target_date = df['time'].dt.date.iloc[0] full_time = pd.date_range( start=target_date, end=target_date + pd.Timedelta(days=1), freq='15T', inclusive='left' # 左闭右开,刚好覆盖00:00到23:45的所有区间 ) # 4. 重索引补全所有时段,无数据默认填充NaN,需要填0可以加参数fill_value=0 result = grouped_sum.reindex(full_time).reset_index(names='time').rename(columns={'Q':'SUM(Q)'})
简化写法
如果使用pandas 1.1.0及以上版本,也可以通过pd.Grouper的origin参数指定分组起点,再用asfreq补全区间:
df['time'] = pd.to_datetime(df['time']) result = df.groupby( pd.Grouper(key="time", freq="15Min", origin="start_day") )['Q'].sum().asfreq('15T').reset_index(name='SUM(Q)')
如果需要把空值替换为0,在asfreq里加fill_value=0即可。
内容的提问来源于stack exchange,提问作者chessosapiens
相关产品推荐
相关产品推荐

