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

时间:2015-05-15 21:14:43

标签: python pandas

我试图在python中创建数据的时间窗口,但我仍然坚持找到实现目标的步骤。我知道我可以通过从数据框中获取数据并编写一些凌乱的for循环来到达我想要的位置。虽然我对熊猫有点新鲜,但我想知道如何使用pandas操作来做到这一点。

为了说明我的意思,我在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的各种组合,但仍无法强制使用此输出格式。有什么建议?我对能帮助我学会更有效地使用大熊猫的解决方案感兴趣。谢谢!

1 个答案:

答案 0 :(得分:3)

如果我理解正确并且您的月份列已经是月度,那么您可以groupby'类别'列并在'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