Python 对groupby进行操作,并将结果连接到pandas中的数据帧上
我试图对数据框groupby date的结果进行线性回归,并在另一个数据框上汇总结果。到目前为止,我使用的是一个中间系列: 数据帧类似于Python 对groupby进行操作,并将结果连接到pandas中的数据帧上,python,pandas,Python,Pandas,我试图对数据框groupby date的结果进行线性回归,并在另一个数据框上汇总结果。到目前为止,我使用的是一个中间系列: 数据帧类似于 marker date variable identifier value EA 2007-01-01 0.33 55 123 EA 2007-01-01 0.73 56 1123 EA 2007-01-01
marker date variable identifier value
EA 2007-01-01 0.33 55 123
EA 2007-01-01 0.73 56 1123
EA 2007-01-01 0.51 57 123
EA 2007-02-01 0.13 55 4446
EA 2007-02-01 0.23 57 667
EA 2007-03-01 0.82 55 5675
EA 2007-03-01 0.88 56 1
EB 2007-01-01 0.13 45 123
EB 2007-01-01 0.74 46 33234
EB 2007-01-01 0.56 47 111
EB 2007-02-01 0.93 45 42657
EB 2007-02-01 0.23 47 12321355
EB 2007-03-01 0.82 45 9897
EB 2007-03-01 0.38 46 786
EB 2007-03-01 0.19 47 993845
以及代码片段:
import statsmodels as sm
import pandas as pd
reg_results = pd.Series(name='reg_results')
mean_results = pd.Series(name='mean_results')
for date, group in df.groupby(df.index.date):
formula = sm.formula.ols('value ~ variable', data=group).fit()
reg_results.set_value(date.strftime("%Y-%m-%d"), formula.params['Intercept'] + formula.params['variable']*group['variable'])
mean_results.set_value(date.strftime("%Y-%m-%d"), group.mean()['variable'])
final_df = pd.DataFrame()
final_df = pd.concat([reg_results, mean_results], axis=1)
还有其他的操作,比如组上的第二个groupby等等,所以我可以为我想要创建的每个操作创建一个系列,这很快就会变得非常复杂。有没有一种方法可以一步完成这项工作,或者至少不用中间系列?您的代码似乎很好,除了
- 我建议您使用
/groupby
返回a(请参阅)apply
似乎位于错误的轴上concat
这里有一些类似于您的代码(我现在登录的计算机没有安装
statsmodels
)
(请注意,在本例中,它是df.date
,您认为它有点不同。)
这就像你在sens中的OLS一样,每个组都有一些事情要做,并且有多个返回值。在您的例子中,您将使用一个函数,该函数接受一个组并返回一系列OLS结果
现在我们有了这个,这很简单
pd.concat([df, res], axis=1)
请注意轴=1,我相信这就是你在这里的意思。这是一个打字错误,concat在轴=1上。
pd.concat([df, res], axis=1)