Pandas如何按周聚合数据,按经纬度分组求字段均值?
报错原因分析
第一种写法报错原因
- 未对
lat、lon进行分组,直接全表重采样不符合按地理位置分组统计的需求 - 未提前将
date列转换为datetime类型,resample无法识别时间维度,触发DataError: No numeric types to aggregate报错 - 结尾的
reset_index(drop=True)会直接丢弃所有时间、分组字段,即使运行成功也无法得到目标结构
第二种写法报错原因
- 分组参数多套了一层多余的方括号:
[['lat', 'lon'], ...]会被pandas识别为一个长度为2的独立分组键,和df的行长度不匹配,触发ValueError: Grouper and axis must be same length报错 - 分组键需要是平级列表,将所有分组维度放在同一层级即可
正确实现代码
首先先将date列转换为datetime类型,这是所有时间类操作的前提:
import pandas as pd # 转换日期格式 df['date'] = pd.to_datetime(df['date']) # 按lat、lon、周分组计算val平均值,freq可根据周起始规则调整,比如W-MON代表周一为周起始 res = df.groupby(['lat', 'lon', pd.Grouper(key='date', freq='W')])['val'].mean().reset_index() # 提取目标month、week字段 res['month'] = res['date'].dt.strftime('%Y-%m') res['week'] = res['date'].dt.isocalendar().week # 调整列顺序得到最终结果 final_df = res[['month', 'week', 'lat', 'lon', 'val']]
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

