我正试图在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