我有一个包含这些列的股票面板:日期,股票代码,Ret,MTB。我想每月根据 MTB 值对股票进行排名,并将它们分成 10 组。当我想制作投资组合时,需要此程序。我曾经使用以下代码在 SAS 中很容易地做到这一点:
proc rank data=dt out=dt group=10;
by Date;
var MTB;
ranks MTB_Rank;
run;
然而,在 Python 中,我找不到一种直接的方法来进行排名和分组。我使用以下方法按日期进行排名和分组,但答案并不令人满意!
***dt['MTB_Rank'] = dt.groupby(['Date'])['MTB'].transform(lambda x: pd.qcut(x, q=10, labels=False, duplicates= 'drop'))***
问题是它不会为每个日期创建 10 个组。事实上,它只是为整个数据创建了 7 个组,每个日期可能只有一些组。我也无法删除“duplicates='drop'”,因为代码向我显示了一个错误,即 Bin 边缘必须是唯一的。如果您能指导我解决这个问题,我将不胜感激。谢谢