pd.groupbyexpandingmean在不应该使用的地方给出NaN

问题描述

我有这种类型的数据框

         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方面不匹配。也许这可以帮助别人

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...