Python 对groupby进行操作,并将结果连接到pandas中的数据帧上

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

我试图对数据框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      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
    /
    apply
    返回a(请参阅)

  • concat
    似乎位于错误的轴上


这里有一些类似于您的代码(我现在登录的计算机没有安装
statsmodels

(请注意,在本例中,它是
df.date
,您认为它有点不同。)

这就像你在sens中的OLS一样,每个组都有一些事情要做,并且有多个返回值。在您的例子中,您将使用一个函数,该函数接受一个组并返回一系列OLS结果


现在我们有了这个,这很简单

pd.concat([df, res], axis=1)

请注意轴=1,我相信这就是你在这里的意思。

这是一个打字错误,concat在轴=1上。
pd.concat([df, res], axis=1)