<p>您可以迭代组并检查第一个事件是否为TIP,然后使用<code>series.shift</code>和<code>pd.concat</code>添加第一行并将最后一行追加回:</p>
<pre><code>l = [pd.concat((g.shift().fillna({'event':'"TIP"','time_left':'00:12:00'}).bfill(),
g.iloc[[-1]]))
if 'TIP' not in g['event'].iloc[0] else g for _,g in df.groupby('g_id')]
out = pd.concat(l,ignore_index=True)
print(out)
</code></pre>
<hr/>
<pre><code> g_id event time_left home away
0 1 "TIP" 00:12:00 8 6
1 1 "SHOT" 00:11:48 8 6
2 1 "MISS" 00:11:20 8 6
3 1 "TOV" 00:11:15 8 6
4 1 "SHOT" 00:10:40 8 6
5 2 "TIP" 00:12:00 7 3
6 2 "REB" 00:11:48 7 3
7 2 "FOUL" 00:11:35 7 3
8 2 "FT" 00:11:33 7 3
9 2 "FT" 00:11:31 7 3
10 3 "TIP" 00:12:00 5 1
11 3 "MISS" 00:11:43 5 1
12 3 "REB" 00:11:42 5 1
13 3 "SHOT" 00:11:27 5 1
14 3 "TOV" 00:11:04 5 1
15 4 "TIP" 00:12:00 9 4
16 4 "SHOT" 00:11:39 9 4
17 4 "MISS" 00:11:17 9 4
18 4 "REB" 00:11:16 9 4
19 4 "SHOT" 00:10:58 9 4
</code></pre>