在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列

Posted

技术标签:

【中文标题】在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列【英文标题】:Regress by group in pandas dataframe and add columns with forecast values and beta/t-stats 【发布时间】:2017-06-26 16:48:36 【问题描述】:

这是我的数据框 df 的示例:

Category    Y                 X1        X2
0   Apple   0.083050996 0.164056482 0.519875358
1   Apple   0.411044939 0.774160332 0.002869499
2   Apple   0.524315907 0.422193005 0.97720091
3   Apple   0.721124638 0.645927536 0.750210715
4   Berry   0.134488729 0.299288214 0.522933484
5   Berry   0.733162132 0.608742944 0.957595544
6   Berry   0.113051075 0.641533175 0.19799635
7   Berry   0.275379123 0.249143751 0.049082766
8   Carrot  0.588121494 0.750480977 0.615399987
9   Carrot  0.878221581 0.021366296 0.069184879

现在我希望代码能够对每个类别进行回归(即按类别分组的横截面回归(对于 Apple、Berry 和 Carrot 等))。

然后我想添加具有回归预测值的新列 df['Y_hat'],以及相应的 2 个 beta 和 t-statistic 值(beta 和 t-stat 值对于多行的同一类别)。

最终的 df 将有 5 个额外的列,Y_hat、beta 1、beta 2、t-stat 1 和 t-stat 2。

【问题讨论】:

【参考方案1】:

你想为“GroupBy”做很多事情:)

我认为最好按类别对 DataFrame 进行切片,然后将该类别的每个单独结果存储在一个字典中,您将在循环结束时使用该字典来构建您的 DataFrame。

result = 
# loop on every category
for category in df['Category'].unique():
    # slice
    df_slice = df[df['Category'] == category]
    # run all the stuff your want to do
    result[category] = 
      'predicted_value': ***,
      'Y_hat': ***
      'etc'
      ...
    

# build dataframe with all your results
final_df = pd.DataFrame(result)

如果还需要调试,会容易得多!祝你好运! :)

【讨论】:

问题实际上是我的数据框很大,使用 groupby 会有更快的方法吗?谢谢 GroupBy 速度很快,因为它使用了以非 Python 编写的运行时和函数。如果你写这些操作是纯Python,那么切片或者使用pandas group by都没有区别!

以上是关于在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列的主要内容,如果未能解决你的问题,请参考以下文章

在数据框中按组折叠文本[重复]

在 Pandas 中按组均值创建大均值中心变量

如何在 Pandas 数据框中按列值分组

Pandas按组内的值分组和排序[重复]

在 Pandas GroupBy 数据框中按 ID 计算两个日期之间的行数

如何在 Pandas 数据框中按行值对日期时间列进行排序?