在 pandas 数据框中按组回归并添加具有预测值和 beta/t-stats 的列
Regress by group in pandas dataframe and add columns with forecast values and beta/t-stats
这是我的数据框 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。
您想为 "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)
如果还需要调试会容易得多!祝你好运! :)
这是我的数据框 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。
您想为 "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)
如果还需要调试会容易得多!祝你好运! :)