【问题标题】:Operate on groupby and concatenate results on a dataframe in pandas对 groupby 进行操作并在 pandas 中的数据帧上连接结果
【发布时间】:2015-09-09 07:11:36
【问题描述】:

我正在尝试按日期对数据框 groupby 的结果进行线性回归,并将结果汇​​总到另一个数据框上。到目前为止,我使用的是中间系列:

数据框类似于

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

还有代码sn-p:

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 等等,所以我要为每个要创建的操作创建一个系列,这会变得非常复杂非常快。有没有办法一步完成,或者至少没有中间系列?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你的代码看起来很不错,除了


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

    res = df.groupby(df.date).apply(lambda g: pd.Series({'mean': g.variable.mean(), 'min': g.variable.min()}))
    

    (请注意,在此示例中为df.date,您会有所不同。)

    这就像您的 OLS,因为每个组都有一些事情要做,并且有多个返回值。在您的情况下,您将使用一个函数,该函数接受一个组并返回一系列 OLS 结果。


    既然我们有了,那就简单了

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

    注意axis=1 - it means to concat horizontally,我相信这就是你的意思。

    【讨论】:

    • 这是一个错字,concat 在axis=1上。
    猜你喜欢
    • 2022-06-21
    • 2017-08-09
    • 2018-02-01
    • 2015-09-16
    • 2018-10-19
    • 2019-02-07
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多