<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><h1 id="pandas如何生成滞后项?">pandas如何生成滞后项?</h1>
<p>通常情况下,在<code>Stata</code>中的做法是</p>
<pre><code>xtset id year
g lag = l.profit
</code></pre>
<p>然而,我发现在pandas中,这一做法将存在一定的问题。<br>
在普通情况下,不会产生错误。当数据存在跳跃或者某年没有出现时就出问题了。</p>
<table>
<thead>
<tr>
<th>id</th>
<th>year</th>
<th>profit</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>10</td>
<td>100</td>
</tr>
<tr>
<td>1</td>
<td>11</td>
<td>110</td>
</tr>
<tr>
<td>1</td>
<td>12</td>
<td>120</td>
</tr>
<tr>
<td>1</td>
<td>13</td>
<td>132</td>
</tr>
<tr>
<td>1</td>
<td>14</td>
<td>110</td>
</tr>
<tr>
<td>1</td>
<td>15</td>
<td>126</td>
</tr>
<tr>
<td>2</td>
<td>10</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>11</td>
<td>110</td>
</tr>
<tr>
<td>2</td>
<td><strong>12</strong></td>
<td>120</td>
</tr>
<tr>
<td>2</td>
<td><strong>14</strong></td>
<td>110</td>
</tr>
<tr>
<td>2</td>
<td>15</td>
<td>126</td>
</tr>
<tr>
<td>–</td>
<td>–</td>
<td>–</td>
</tr>
</tbody>
</table><p>如果数据都类似<code>id == 1</code> 时那样,<strong><code>with no gaps</code><strong>的话,使用<code>shift(1)</code>是没有问题的。而当有gaps存在时使用<code>shift(1)</code>就会出现问题了。正常的情况下,<strong>lag</strong>变量在</strong>id ==2 , year == 13</strong>的时候是不存在的。但是直接用 <code>shift</code>的话,这里是存在的,不会是缺失值。想问的是,有没有什么办法可以解决这里的滞后项问题?</p>
</div>
</div>