【发布时间】:2016-12-13 02:31:04
【问题描述】:
我有一个看起来像这样的 Pandas 数据框:
groupvar1 groupvar2 time value
1 1 1 5
1 1 2 8
1 1 3 9
1 1 4 12
1 1 5 19
1 2 1 5
1 2 2 8
1 2 3 9
我想在每个groupvar1 x groupvar2 组合中创建一些自回归项,这样我最终得到:
groupvar1 groupvar2 time value t1 t2 t3
1 1 1 5 5 5 5
1 1 2 8 5 5 5
1 1 3 9 8 5 5
1 1 4 12 9 8 5
1 1 5 19 12 9 8
1 2 1 5 5 5 5
1 2 2 8 5 5 5
1 2 3 9 8 5 5
基本上,我在groupby 对象的每个组中创建三个自回归项t1、t2、t3。如果结果是NaN,我从当前值回填。我的代码是:
for name, group in df.groupby(['groupvar1', 'groupvar2']):
for i in range(1, 4):
group.loc[:,'t' + str(i)] = group.sort_values(by=['time'])['value'].shift(i).fillna(method='ffill').fillna(method='bfill').values
问题在于,在大型数据集上,这非常慢。有没有办法使用可能比这更快的内置 Pandas 方法?例如,改用.apply?
【问题讨论】:
-
您能否更清楚地了解如何计算 t1、t2 和 t3。我看到你的代码是如何生成数据的,但是用简单的英语来说,这些数据代表什么?我不明白您所说的“自回归”是什么意思。
-
@Alex - 基本上,t1 将是
valuetime- 1。t2 将是valuetime- 2(因此使用 Pandas.shift()。这更有意义吗?
标签: python performance pandas optimization dataframe