<p>使用<code>shift</code>方法,首先用它创建一个列,我们将在下面使用它:</p>
<pre><code>df['Driver_shift'] = df['Driver'].shift()
</code></pre>
<p>选择您实际更换驾驶员和带面罩的相同车号的行:</p>
<pre><code>mask = (df['Driver'] != df['Driver_shift'])&(df['Car_ID'] == df['Car_ID'].shift())
df_change = df[mask]
</code></pre>
<p>现在,通过添加0.5来更改索引,以便以后进行连接和排序,并更改两列的值:</p>
<pre><code>df_change = df_change.set_index(df_change.index+0.5)
df_change.loc[:,'Event'] = df_change['Driver_shift'] + ' to ' + df_change['Driver']
df_change['Driver'] = '' # to replace the value
</code></pre>
<p>现在可以连接、排序、重置索引并删除:</p>
<pre><code>pd.concat([df,df_change]).sort_index().reset_index(drop=True).drop('Driver_shift',1)
</code></pre>
<p>你会得到:</p>
<pre><code> Car_ID Date Driver Event
0 B332 2018-03-12 Alex Rent_Car_B
1 B332 2018-03-14 Alex Rent_Car_B
2 B332 2018-03-15 Mick Rent_Car_B
3 B332 2018-03-15 Alex to Mick
4 C315 2018-03-17 Sara Rent_Car_C
5 C315 2018-03-13 Sara Rent_Car_C
6 C315 2018-03-15 Jean Rent_Car_C
7 C315 2018-03-15 Sara to Jean
8 C315 2018-03-18 Sara Rent_Car_C
9 C315 2018-03-18 Jean to Sara
10 C315 2018-03-21 Sara Rent_Car_C
11 F310 2018-03-10 Franck Rent_Car_F
12 F310 2018-03-13 Michel Rent_Car_F
13 F310 2018-03-13 Franck to Michel
</code></pre>
<p>编辑:在每个驱动程序和日期前添加一行</p>
<pre><code>df1 = df.copy()
df1.index = df1.index +0.5
df2 = pd.concat([df.drop('Event',1),df1]).sort_index().reset_index(drop=True)
df2['Event'] = df2['Event'].fillna(df2['Driver'])
</code></pre>
<p>结果是df2</p>