Pandas:使用时间窗口或移位变量的新行



我正试图在python中创建我的数据的时间窗口,但我一直在弄清楚到达那里的步骤。我知道我可以通过从数据框中取出数据并编写一些乱七八糟的for循环来达到我想要的效果。虽然我对熊猫有点陌生,但我想弄清楚如何使用熊猫操作来做到这一点。

为了更清楚地说明我的意思,我在pandas数据框架中有一些数据,如下所示:

              category   var1   var2
month
2010-01-01           A    0.2      1
2010-02-01           A    0.3      2      
2010-03-01           A    0.4      2
2010-04-01           A    0.5      1
2010-01-01           B    0.6      1
2010-02-01           B    0.7      2
2010-03-01           B    0.8      1
     .               .     .       . 
     .               .     .       . 
     .               .     .       . 

我的目标是转换这些数据,使这些行成为原始数据的"有时间窗口"版本。我要做的事情很难用语言表达,所以我举个例子。假设我的时间窗宽度是N个月,或者在这个例子中是2个月。我希望结果看起来像这样:

category    current_var2    current_var1    previous_var1
       A               1             0.2              NaN
       A               2             0.3              0.2
       A               2             0.4              0.3
       A               1             0.5              0.4
       B               1             0.6              NaN
       B               2             0.7              0.6
       B               1             0.8              0.7

我尝试了pivot、shift和groupby的各种组合,但仍然无法强制使用这种输出格式。有什么建议吗?我对能帮助我更有效地使用熊猫的解决方案很感兴趣。谢谢!

如果我理解正确并且您的月份列已经是每月的,那么您可以groupby 'category'列并在'var1'上调用transform并传递函数shift并将其分配回df:

In [32]:
df['previous_var1'] = df.groupby('category')['var1'].transform(pd.Series.shift)
df
Out[32]:
           category  var1  var2   previous_var1
month                                          
2010-01-01        A   0.2     1             NaN
2010-02-01        A   0.3     2             0.2
2010-03-01        A   0.4     2             0.3
2010-04-01        A   0.5     1             0.4
2010-01-01        B   0.6     1             NaN
2010-02-01        B   0.7     2             0.6
2010-03-01        B   0.8     1             0.7

最新更新