我想对熊猫的分组数据框架进行线性回归。我正在调用的函数抛出一个我无法解析的KeyError。
我有一个叫做dat的环境数据集,它包括一种化学物质在不同树龄、不同年龄、不同地点、在几个时间步骤中的浓度数据。现在,我想在每一组(地点、物种、年龄)中,随着时间的推移,对注意力进行回归。
这是我的密码:
将熊猫作为pd导入
导入statsmodels.api作为sm
dat = pd.read_csv('data.csv')
dat.head(15)
SampleName Concentration Site Species Age Time_steps0 batch1 2.18德国松1 1
1 batch2 5.19德国松1 2
德国松2 batch3 11.52 1 3
挪威云杉3 batch4 16.64 0 1
挪威云杉4 batch5 25.30 0 2
挪威云杉5 batch6 31.20 0 3
6 batch7 12.63挪威云杉1 1
7 batch8 18.70挪威云杉1 2
8 batch9 43.91挪威云杉1 3
9 batch10 9.41瑞典桦树0 1
10 batch11 11.10瑞典桦树0 2
11 batch12 15.73瑞典桦树0 3
12 batch13 16.87瑞士山毛榉0 1
13 batch14 22.64瑞士山毛榉0 2
瑞士batch15 29.75瑞士山毛榉0 3
def ols_res_grouped(组):
xcols_const = sm.add_constant(group['Time_steps']) linmod = sm.OLS(group['Concentration'], xcols_const).fit() return linmod.params[1] 分组=dat.groupby(“站点”、“物种”、“年龄”).agg(Ols_res_grouped)
我想得到Time_steps上浓度数据的回归系数,但得到一个KeyError:'Time_steps‘。sm方法如何访问组“Time_steps”
发布于 2019-07-22 08:15:14
根据熊猫文献的说法,agg独立地将函数应用于每一列。也许可以使用NamedAgg,但我不确定。
我认为只使用for循环来处理这个问题要容易得多:
for _, group in dat.groupby(['Site','Species','Age']):
coeff = ols_res_grouped(group)
# if you want to put the coeff inside the dataframe
dat.loc[group.index, 'coeff'] = coeffhttps://stackoverflow.com/questions/57133794
复制相似问题