При условии, что столбец 'datadate' является индексом таблицы (и типа datetime64), следующий код должен создать желаемый дополнительный столбец:
df.groupby('tic')['invest'].shift(1, freq=pd.DateOffset(years=2))
Редактировать: все еще необходимо добавить этот новый столбец к исходной таблице. Вот еще некоторые подробности.
Сначала убедитесь, что столбец 'datadate' имеет тип datetime64:
df['datadate'] = pd.to_datetime(df['datadate'])
Затем давайте создадим новый столбец и добавим его в нашу таблицу:
new_column = (df.set_index('datadate')
.groupby('tic')['invest']
.shift(1, freq=pd.DateOffset(years=2)))
df.set_index(['tic', 'datadate'], inplace=True)
df['l2_invest'] = new_column
df.reset_index(inplace=True)
Начиная с исходной таблицы, получается
tic datadate fyear invest l2_invest
0 AAPL 1998-12-31 1997 12.3 NaN
1 AAPL 1999-12-31 1998 14.5 NaN
2 AAPL 2002-12-31 2002 9.7 NaN
3 AAPL 2003-12-31 2003 21.8 NaN
4 AAPL 2004-12-31 2004 21.4 9.7
5 AAPL 2005-12-31 2005 18.9 21.8
6 TSLA 2008-05-31 2008 11.5 NaN
7 TSLA 2009-05-31 2009 13.7 NaN
8 TSLA 2010-05-31 2010 19.4 11.5
9 TSLA 2011-05-31 2011 14.5 13.7
10 TSLA 2014-05-31 2013 14.8 NaN