Использование:
print (df)
A B SortedDate Selected
0 aa 200 01-Jan-20 Y
1 aa 200 23-Dec-19 Y
2 aa 200 24-Oct-19 Y <- changed datetime
3 bb 400 13-Mar-20 Y
4 bb 400 02-Feb-20 Y
5 bb 500 15-Mar-20 N
6 cc 700 02-Feb-20 Y
7 cc 700 02-Feb-20 Y
8 cc 900 03-Feb-20 N
9 dd 900 30-Jan-20 N
10 dd 200 30-Jan-20 N
#convert column to datetimes
df['SortedDate'] = pd.to_datetime(df['SortedDate'], format='%d-%b-%y')
#get shifted values and subtract 2 months
s = (df.groupby(['A','B'])['SortedDate'].shift().fillna(df['SortedDate']) -
pd.DateOffset(months=2))
#chain by bitwise AND (&) only for duplicated groups (lenghts 2 or more)
mask = df['SortedDate'].gt(s) & df.duplicated(['A','B'], keep=False)
#set values by mask
df['Selected1'] = np.where(mask, 'Y', 'N')
print (df)
A B SortedDate Selected Selected1
0 aa 200 2020-01-01 Y Y
1 aa 200 2019-12-23 Y Y
2 aa 200 2019-10-24 N Y
3 bb 400 2020-03-13 Y Y
4 bb 400 2020-02-02 Y Y
5 bb 500 2020-03-15 N N
6 cc 700 2020-02-02 Y Y
7 cc 700 2020-02-02 Y Y
8 cc 900 2020-02-03 N N
9 dd 900 2020-01-30 N N
10 dd 200 2020-01-30 N N