Pandas按15分钟PeriodIndex分组失效问题求助
Pandas按15分钟分组异常问题排查与解决
问题场景
你有一个含秒级timestamp字段的31536000行×2列DataFrame,执行以下代码尝试按15分钟区间求power均值:
directory = 'data/peak_shaving/20220803_132445' df = pd.read_csv(f'{directory}/demand_profile_simulation.csv') df['timestamp'] = pd.to_datetime(df['timestamp']) df = df.groupby(pd.PeriodIndex(df['timestamp'], freq="15min"))['power'].mean()
实际结果却按分钟分组,但测试天(D)、小时(H)等其他freq分组均正常。
问题原因与解决办法
- freq参数写法兼容性问题
"15min"并非Pandas频率字符串的标准缩写,部分版本对该写法的解析存在异常,导致分组逻辑失效。建议替换为标准缩写"15T"(T代表分钟),修改后的代码:
df = df.groupby(pd.PeriodIndex(df['timestamp'], freq="15T"))['power'].mean()
- 改用更稳定的分组方式
相比PeriodIndex,使用pd.Grouper对时间列分组的兼容性和可靠性更强,推荐写法:
df = df.groupby(pd.Grouper(key='timestamp', freq='15min'))['power'].mean() # 或用标准缩写 df = df.groupby(pd.Grouper(key='timestamp', freq='15T'))['power'].mean()
- 兜底方案:先生成15分钟区间标签再分组
如果上述方法仍有问题,可先将timestamp向下取整到15分钟区间,再基于新标签分组:
df['15min_interval'] = df['timestamp'].dt.floor('15min') df = df.groupby('15min_interval')['power'].mean()
验证步骤
修改代码后,可通过查看分组索引的频率确认是否生效:
print(df.index.freq) # 预期输出:<15 * Minutes> 或 <15T>
内容的提问来源于stack exchange,提问作者demetere._
相关产品推荐
相关产品推荐

