<p>您面临的内存问题可能是由于同一数据帧有多个(子)副本。在pandas中没有必要这样做,正如其他人所指出的,<code>.shift</code>函数可以实现您需要的功能。在</p>
<p>首先创建一个pandas数据帧,它有两个商店,即24和25。在</p>
<pre><code>df = pd.DataFrame({'shop_id':[24, 24, 24, 24, 24, 25, 25, 25, 25, 25],
'item_id': [2000, 2000, 2000, 3000, 3000, 1000, 1000, 1000, 1000, 1000],
'date_block_num': [7, 8, 9, 7, 8, 5, 6, 7, 8, 9],
'item_cnt_month': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
+ -+ -+ + +
|shop_id|item_id|date_block_num|item_cnt_month|
+ -+ -+ + +
| 24| 2000| 7| 1|
| 24| 2000| 8| 2|
| 24| 2000| 9| 3|
| 24| 3000| 7| 4|
| 24| 3000| 8| 5|
| 25| 1000| 5| 6|
| 25| 1000| 6| 7|
| 25| 1000| 7| 8|
| 25| 1000| 8| 9|
| 25| 1000| 9| 10|
+ -+ -+ + +
</code></pre>
<p>24号店有2000号和3000号。在</p>
<p>在数据块7中有1个项目2000的计数,在数据块8中有2个计数,等等</p>
<p>目标是为该商店中的该商品创建一个item_cnt_month lag列,该列的值为item_cnt_month n个月前。在</p>
<p>要创建滞后特性,可以使用下面的函数。在</p>
^{pr2}$
<p>通过打电话</p>
<pre><code>lags = [1, 2]
group_cols = ['shop_id', 'item_id']
shift_col = 'item_cnt_month'
order_col = 'date_block_num'
df = df.sort_values(by=group_cols+[order_col], ascending=True)
df = lag_features(df, lags, group_cols, shift_col)
</code></pre>
<p>结果是:</p>
<pre><code>+ -+ -+ + + + +
|shop_id|item_id|date_block_num|item_cnt_month|item_cnt_month_lag_1|item_cnt_month_lag_2|
+ -+ -+ + + + +
| 24| 2000| 7| 1| NaN| NaN|
| 24| 2000| 8| 2| 1.0| NaN|
| 24| 2000| 9| 3| 2.0| 1.0|
| 24| 3000| 7| 4| NaN| NaN|
| 24| 3000| 8| 5| 4.0| NaN|
| 25| 1000| 5| 6| NaN| NaN|
| 25| 1000| 6| 7| 6.0| NaN|
| 25| 1000| 7| 8| 7.0| 6.0|
| 25| 1000| 8| 9| 8.0| 7.0|
| 25| 1000| 9| 10| 9.0| 8.0|
+ -+ -+ + + + +
</code></pre>
<p>请注意,由于没有显式联接,因此需要使用<code>.sort_values(all key columns and date column)</code>对数据帧进行正确的排序</p>