<p>IIUC,你需要<code>groupby</code>和<code>transform</code>:</p>
<pre><code>mask = (data['status'].isin(['Pass','pass']))
data.loc[mask,'P2'] = data[mask].groupby('ID')['P1'].transform(lambda x: x.shift(-1))
data.loc[data['Accuracy']=='Not Accurate','P2'] = np.nan
</code></pre>
<p>或仅使用过滤器:</p>
<pre><code>mask = (data['status'].isin(['Pass','pass']))
data.loc[mask,'P2'] = data.loc[mask,'P1'].shift(-1)
mask2 = data['ID'].ne(data['ID'].shift(-1))|data['status'].eq('shot')|data['Accuracy'].eq('Not Accurate')
data.loc[mask2,'P2'] = ''
</code></pre>
<hr/>
<pre><code>print(data)
ID EventSecond P1 Code status Accuracy P2
0 1 1.5 A 12 Pass Accurate B
1 1 2.0 B 13 Pass Accurate C
2 1 2.5 C 16 Pass Accurate D
3 1 3.0 D 9 Pass Accurate E
4 1 3.8 E 9 Pass Accurate NaN
5 2 4.0 F 0 Pass Not Accurate NaN
6 2 4.8 A 4 shot Accurate NaN
7 2 6.0 D 13 shot Accurate NaN
8 2 7.0 E 14 pass Accurate G
9 2 8.0 G 16 pass Not Accurate NaN
</code></pre>
<p>如果您选择的是空白,请使用:</p>
<pre><code>print(data.fillna(''))
ID EventSecond P1 Code status Accuracy P2
0 1 1.5 A 12 Pass Accurate B
1 1 2.0 B 13 Pass Accurate C
2 1 2.5 C 16 Pass Accurate D
3 1 3.0 D 9 Pass Accurate E
4 1 3.8 E 9 Pass Accurate
5 2 4.0 F 0 Pass Not Accurate
6 2 4.8 A 4 shot Accurate
7 2 6.0 D 13 shot Accurate
8 2 7.0 E 14 pass Accurate G
9 2 8.0 G 16 pass Not Accurate
</code></pre>