Pandas将30秒数据重采样为10分钟后行列结构变更问题问询
问题原因
- 两次调用
groupby属于冗余逻辑,第二次的聚合操作会直接覆盖第一次的结果 groupby默认会将分组字段设为行索引,导致输出结果的时间信息变成了索引而不是普通列- 列重命名逻辑错误:把聚合得到的ZTD站点平均值错误重命名为
Date,完全颠倒了时间和数值的对应关系
修正后的完整代码
def Resample_10mins(df, ZTD_station): # 确保时间列格式正确 df['Date'] = pd.to_datetime(df.Date) # 时间取最近10分钟间隔,需要向下/向上取整可以替换为dt.floor('10min')/dt.ceil('10min') df['rounded_to_nearest_10_min'] = df.Date.dt.round('10min') # 按10分钟分组聚合,as_index=False会保留分组列为普通列而非行索引 df = df.groupby('rounded_to_nearest_10_min', as_index=False).agg({ZTD_station: 'mean'}) # 把时间列重命名为Date,对齐原输入的结构 df = df.rename(columns={'rounded_to_nearest_10_min': 'Date'}) return df
更简洁的原生重采样写法
Pandas自带的resample接口专门用于时间序列重采样,无需手动新增分组列:
def Resample_10mins(df, ZTD_station): df['Date'] = pd.to_datetime(df.Date) # 时间设为索引后直接做10分钟重采样,label参数控制区间取左/右端点,聚合后重置索引恢复普通列结构 df = df.set_index('Date').resample('10min', label='right')[ZTD_station].mean().reset_index() return df
修改后输出结构和原输入完全一致:包含默认整数行索引、Date时间列、对应站点的ZTD均值列。
内容的提问来源于stack exchange,提问作者Sandy Chkeir
相关产品推荐
相关产品推荐

