问题描述
我有这种类型的数据框
gvkey fyear cusip ebit ... ind status pretax_adj pretax
12 1000 1973.0 000032102 3.277 ... 0 0 -0.118750 2.997750
13 1000 1974.0 000032102 3.494 ... 0 0 -1.312500 3.651500
14 1000 1975.0 000032102 5.335 ... 0 0 1.435417 2.788583
15 1000 1976.0 000032102 7.143 ... 0 0 0.493750 5.680250
16 1000 1977.0 000032102 3.503 ... 0 0 0.354167 2.908833
... ... ... ... ... ... ... ... ...
550010 203573 1994.0 522000108 0.498 ... 0 0 0.000000 -3.867000
550536 209418 1994.0 927191106 8.965 ... 0 1 0.841176 5.634824
551125 220508 1993.0 400488409 95.255 ... 0 0 46.611429 38.567571
551126 220508 1994.0 400488409 62.230 ... 0 0 25.794286 38.528714
554555 277918 1994.0 29355M200 -24.665 ... 0 1 0.000000 -25.021000
我想计算按pretax
分组的gvkey
列的最小观察窗为1的滚动平均值。我使用以下
df['new']=df.groupby('gvkey')['pretax'].expanding(min_periods=1).mean().reset_index()['pretax']
我得到以下内容
gvkey fyear cusip ... pretax_adj pretax new
12 1000 1973.0 000032102 ... -0.118750 2.997750 0.694887
13 1000 1974.0 000032102 ... -1.312500 3.651500 0.715974
14 1000 1975.0 000032102 ... 1.435417 2.788583 3.201076
15 1000 1976.0 000032102 ... 0.493750 5.680250 3.505423
16 1000 1977.0 000032102 ... 0.354167 2.908833 NaN
... ... ... ... ... ... ...
550010 203573 1994.0 522000108 ... 0.000000 -3.867000 NaN
550536 209418 1994.0 927191106 ... 0.841176 5.634824 NaN
551125 220508 1993.0 400488409 ... 46.611429 38.567571 NaN
551126 220508 1994.0 400488409 ... 25.794286 38.528714 NaN
554555 277918 1994.0 29355M200 ... 0.000000 -25.021000 NaN
如您所见,我获得了NaN不应存在的位置。例如,请注意,对于gvkey==220508
,我有2个观察值,因此应计算第二个值fyear==1994
。为什么会这样?
解决方法
我找到了解决方案:这是我的一个错误。我已经使用先前构建的布尔掩码对数据框执行了过滤,然后通过expanding
方法应用了.reset_index()
命令。结果是,数据帧的索引和expanding
的结果在维度上相同,但在gvkey
方面不匹配。也许这可以帮助别人