<p>首先用布尔掩码和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mask.html" rel="nofollow noreferrer">^{<cd2>}</a>将年份替换为<code>NaN</code>s,然后用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.bfill.html" rel="nofollow noreferrer">^{<cd4>}</a>将<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">^{<cd3>}</a>替换为<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.ffill.html" rel="nofollow noreferrer">^{<cd5>}</a>将<code>NaN</code>s替换为<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html" rel="nofollow noreferrer">^{<cd7>}</a>:</p>
<pre><code>#only years are numeric
mask = df['Date'].str.isnumeric()
#alternative mask -check length of string
#mask = df['Date'].str.len() == 4
#not numeric return NaNs, so test non NaNs
#mask = pd.to_numeric(df['Date'], errors='coerce').notna()
s = df['Date'].mask(mask)
g = s.groupby(df['Driver'])
df['D_Min'] = g.bfill().fillna(df['Date'])
df['D_Max'] = g.ffill().fillna(df['Date'])
print (df)
Car_ID Date Driver D_Min D_Max
0 B332 2018-03-15 Alex 2018-03-15 2018-03-15
1 B332 2018 Alex 2018-03-12 2018-03-15
2 B332 2018-03-12 Alex 2018-03-12 2018-03-12
3 C315 2018 Sara 2018-03-16 2018
4 C315 2018-03-16 Sara 2018-03-16 2018-03-16
5 C315 2018 Sara 2018-03-11 2018-03-16
6 C315 2018 Sara 2018-03-11 2018-03-16
7 C315 2018-03-11 Sara 2018-03-11 2018-03-11
8 F310 2018-03-10 Franck 2018-03-10 2018-03-10
9 F310 2018 Franck 2018 2018-03-10
</code></pre>
<p><strong>细节</strong>:</p>
<pre><code>print (s)
0 2018-03-15
1 NaN
2 2018-03-12
3 NaN
4 2018-03-16
5 NaN
6 NaN
7 2018-03-11
8 2018-03-10
9 NaN
Name: Date, dtype: object
</code></pre>