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