我正在使用NLSY79数据,并试图构建一个“平滑”的收入变量,该变量在4年内平均值。在1979年至1994年期间,国家统计局每年进行一次调查,而在1996年之后,调查每两年进行一次。这意味着我的平滑收入变量将平均1994年之前的四次观察,1996年之后只有两次
我希望平滑后的收入变量满足以下标准:
1)1979年至1994年的平均收入观察数应为4次,1996年以后仅为2次
2)窗口应该从给定的观察开始,而不是以它为中心。因此,我的平滑收入变量应该告诉我从那一天开始的四年的平均收入
3)应忽略NAN
因此,它应该如下所示(注意,我只计算了可以用我提供的数据计算的“平滑收入”的值。)
id year income 'smoothed income'
1 1979 20,000 21,250
1 1980 22,000
1 1981 21,000
1 1982 22,000
...
1 2014 34,000 34,500
1 2016 35,000
2 1979 28,000 28,333
2 1980 NaN
2 1981 28,000
2 1982 29,000
我对熊猫的数据帧操作还比较陌生,下面是我尝试过的:
smooth = DATA.groupby('id')['income'].rolling(window=4, min_periods=1).mean()
DATA['smoothIncome'] = smooth.reset_index(level=0, drop=True)
此代码说明了NAN,但在其他方面无法实现目标2)和3)
任何帮助都将不胜感激
好的,我已经修改了ansev提供的代码使其工作。填充NaNs是问题的根源
以下是修改后的代码:
我现在唯一的问题是,当剩下的时间少于4年时(例如,从2014年开始,因为我的数据一直持续到2016年),就无法计算平均数。2014年后有没有办法缩短窗户的长度
相关问题 更多 >
编程相关推荐