我把这个作为一个csv在pandas工作-前十行:
简化df如下: permno price mv yearmonth
1752 10057 18.1250 7.898875e+04 198301
4732 10137 23.7500 1.130191e+06 198301
6144 10153 9.7500 1.226550e+05 198302
7869 10225 45.8750 2.530740e+06 198302
8267 10233 57.6250 1.670894e+06 198303
8692 10241 30.8750 5.742132e+06 198303
想按年月分组,按mv进行排序,分为5组,每年一个月分成5个分位数,得到预期结果:
^{pr2}$我尝试过的一些代码:
q20=data.groupby("yearmonth")["mv"].quantile(0.2)
q40=data.groupby("yearmonth")["mv"].quantile(0.4)
q60=data.groupby("yearmonth")["mv"].quantile(0.6)
q80=data.groupby("yearmonth")["mv"].quantile(0.8)
for yearmonth,y in data.groupby(["yearmonth"]):
data_q20=y[y["mv"]<=q20[yearmonth]]
data_q40=y[y["mv"]<=q40[yearmonth]]
data_q40=data_q40[data_q40["mv"]>q20[yearmonth]]
data_q60=y[y["mv"]<=q60[yearmonth]]
data_q60=data_q60[data_q60["mv"]>q40[yearmonth]]
data_q80=y[y["mv"]>q60[yearmonth]]
data_q80=data_q80[data_q80["mv"]<=q80[yearmonth]]
data_q100=y[y["mv"]>q80[yearmonth]]
我不知道如何使用apply将“mv”的年月份映射到分位数1。有什么线索吗?在
这种分类的最终目标是计算出每年每个月的平均回报率。在
我想你可以用cut或qcut来得到你想要的结果。剪切将创建均匀间隔的范围,而qcut将为每个箱子创建偶数个项目。Qcut更符合分位数。在
我的代码是:
从这里,您可以过滤事务。我认为您提供的数据集太小,但在较大的数据集上,此代码应该可以正常工作。在
相关问题 更多 >
编程相关推荐