<p>有一种更好的方法:在调用corr()之前,可以先创建一个移位了数据帧的函数。</p>
<p>将此数据帧获取为示例:</p>
<pre><code>d = {'prcp': [0.1,0.2,0.3,0.0], 'stp': [0.0,0.1,0.2,0.3]}
df = pd.DataFrame(data=d)
>>> df
prcp stp
0 0.1 0.0
1 0.2 0.1
2 0.3 0.2
3 0.0 0.3
</code></pre>
<p>移动其他列(目标列除外)的函数:</p>
<pre><code>def df_shifted(df, target=None, lag=0):
if not lag and not target:
return df
new = {}
for c in df.columns:
if c == target:
new[c] = df[target]
else:
new[c] = df[c].shift(periods=lag)
return pd.DataFrame(data=new)
</code></pre>
<p>假设你的目标是比较prcp(降水变量)和stp(大气压力)</p>
<p>如果你现在这样做的话:</p>
<pre><code>>>> df.corr()
prcp stp
prcp 1.0 -0.2
stp -0.2 1.0
</code></pre>
<p>但如果<strong>移动了1(一)个周期,则所有其他列</strong>都保持<strong>目标</strong>(prcp):</p>
<pre><code>df_new = df_shifted(df, 'prcp', lag=-1)
>>> print df_new
prcp stp
0 0.1 0.1
1 0.2 0.2
2 0.3 0.3
3 0.0 NaN
</code></pre>
<p>注意,现在stp列在period处向上移动一个位置,因此如果调用corr(),将是:</p>
<pre><code>>>> df_new.corr()
prcp stp
prcp 1.0 1.0
stp 1.0 1.0
</code></pre>
<p>所以,你可以用滞后-1,-2,-n!!</p>