Python中基于Pandas多层索引DataFrame实现逐经纬度线性回归
问题解决方法
错误原因
你使用transform方法不符合当前需求:
transform的设计目标是返回和分组内输入行数相同的结果,适合组内标准化、填充组均值这类场景- 你需要每个
(lat, lon)分组返回单个斜率标量,属于分组聚合场景,应该用apply或agg方法 - 之前逐行调用回归函数的问题,正是因为
transform的机制不匹配,将单列的每个元素单独传入了回归函数
修改方案
1. (可选)优化回归函数
np.polyfit支持1维的自变量数组,不需要额外reshape:
import numpy as np def regress(y): # X为年份序列的序号,y为对应气温距平 X = np.arange(len(y)) fit = np.polyfit(X, y, 1) return fit[0]
2. 正确的分组调用方式
选择tempanomaly列后按经纬度分组调用apply,再重置索引即可得到你要的输出结构:
reg = df.groupby(["lat", "lon"])["tempanomaly"].apply(regress).reset_index(name="trend")
输出的reg结构和预期完全一致:
| lat | lon | trend |
|---|---|---|
| -89.0 | -179.0 | -0.23604 |
内容的提问来源于stack exchange,提问作者sun
相关产品推荐
相关产品推荐

