你可以有prev_month_close如下:
df.reset_index(inplace=True)
df = df[['date', 'close', 'prev_month_end']].merge(df[['date', 'close']].rename(columns={'close': 'prev_month_close',
'date': 'prev_month_end'}),
how='left', on='prev_month_end')
OUTPUT
date close prev_month_end prev_month_close
0 1990-01-26 421.299988 1989-12-29 NaN
1 1990-01-29 418.100006 1989-12-29 NaN
2 1990-01-30 410.700012 1989-12-29 NaN
3 1990-01-31 415.799988 1989-12-29 NaN
4 1990-02-23 419.500000 1990-01-31 415.799988
5 1990-02-26 421.000000 1990-01-31 415.799988
6 1990-02-27 422.600006 1990-01-31 415.799988
7 1990-02-28 425.799988 1990-01-31 415.799988
8 1990-03-26 438.799988 1990-02-28 425.799988
9 1990-03-27 439.500000 1990-02-28 425.799988
10 1990-03-28 436.700012 1990-02-28 425.799988
11 1990-03-29 435.399994 1990-02-28 425.799988
12 1990-03-30 435.500000 1990-02-28 425.799988
或者不使用reset_index
df = df[['close', 'prev_month_end']].merge(df[['close']].rename(columns={'close': 'prev_month_close'}),
how='left', left_on='prev_month_end', right_index=True)
OUTPUT
close prev_month_end prev_month_close
date
1990-01-26 421.299988 1989-12-29 NaN
1990-01-29 418.100006 1989-12-29 NaN
1990-01-30 410.700012 1989-12-29 NaN
1990-01-31 415.799988 1989-12-29 NaN
1990-02-23 419.500000 1990-01-31 415.799988
1990-02-26 421.000000 1990-01-31 415.799988
1990-02-27 422.600006 1990-01-31 415.799988
1990-02-28 425.799988 1990-01-31 415.799988
1990-03-26 438.799988 1990-02-28 425.799988
1990-03-27 439.500000 1990-02-28 425.799988
1990-03-28 436.700012 1990-02-28 425.799988
1990-03-29 435.399994 1990-02-28 425.799988
1990-03-30 435.500000 1990-02-28 425.799988