<p>您需要研究一下您的<code>.groupby()</code>逻辑。在</p>
<pre><code>crsp.groupby(['date_crsp','catcode', 'cid']).size().value_counts()
</code></pre>
<p>结果</p>
^{pr2}$
<p>大多数组只有一个值,所以没有太多的值可以改变。不出所料</p>
<pre><code>crsp['amtsumlag.1'] = crsp.groupby(['catcode', 'cid', 'date_crsp'])['amtsum'].shift(1)
</code></pre>
<p>结果:</p>
<pre><code>Data columns (total 8 columns):
feccandid 456939 non-null object
feccandcfscore.dyn 445710 non-null float64
feccandcfscore 355887 non-null float64
cid 456939 non-null object
date_crsp 456939 non-null int64
catcode 456939 non-null object
amtsum 456939 non-null float64
amtsumlag.1 6528 non-null float64
</code></pre>
<p>例如,如果您想<code>.shift()</code>,那么您可能不想在<code>.groupby()</code>中使用它,那么每个组只包含一年。人们期望在<code>.groupby()</code>中看到唯一的group <code>id</code>变量,理想情况下是<code>DateTimeIndex</code>,或者是排序的<code>DataFrame</code>。所以<code>.sort_values('date_crsp')</code>可能是个好主意。在</p>
<pre><code>crsp['amtsumlag.1'] = crsp.sort_values('date_crsp').groupby(['catcode', 'cid'])['amtsum'].shift(1)
</code></pre>
<p>取而代之的是:</p>
<pre><code>feccandid 456939 non-null object
feccandcfscore.dyn 445710 non-null float64
feccandcfscore 355887 non-null float64
cid 456939 non-null object
date_crsp 456939 non-null int64
catcode 456939 non-null object
amtsum 456939 non-null float64
amtsumlag.1 301280 non-null float64
dtypes: float64(4), int64(1), object(3)
</code></pre>
<p>如果没有足够的数据来了解你试图滞后的群体的身份,很难提供更具体的答案。在</p>