Python中变窗长的滚动平均

2024-09-25 00:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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)

任何帮助都将不胜感激


Tags: 数据iddata标准nan中心year平均值
1条回答
网友
1楼 · 发布于 2024-09-25 00:33:30

好的,我已经修改了ansev提供的代码使其工作。填充NaNs是问题的根源

以下是修改后的代码:

df.set_index('year').groupby('id').income.apply(lambda x: x.reindex(range(x.index.min(),x.index.max()+1))
                                                           .rolling(4, min_periods = 1).mean().shift(-3)).reset_index()

我现在唯一的问题是,当剩下的时间少于4年时(例如,从2014年开始,因为我的数据一直持续到2016年),就无法计算平均数。2014年后有没有办法缩短窗户的长度

相关问题 更多 >