<p>您可以将<code>Start</code>和<code>End</code>列转换为日期,获取它们之间的月数,然后使用字典将时间增量替换为所需的单词。合并并将日期时间转换回字符串</p>
<pre><code>import pandas as pd
offsets= {11:'annual',
2:'quarterly',
5:'semiannual'}
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Interval': ['annual', 'quarterly', 'semiannual']})
df2 = pd.DataFrame({'ID': [1, 1, 1, 2, 2, 3, 3, 3],
'Start': ['AUG-FY21','AUG-FY21','AUG-FY21','AUG-FY21','AUG-FY21','AUG-FY21','AUG-FY21','AUG-FY21'],
'End': ['JAN-FY22','OCT-FY21','JUL-FY22','JAN-FY22','OCT-FY21','JAN-FY22','OCT-FY21','JUL-FY22']})
df2['Start'] =pd.to_datetime(df2['Start'], format='%b-FY%y')
df2['End'] =pd.to_datetime(df2['End'], format='%b-FY%y')
df2['Interval'] = df2.apply(lambda x: len(pd.date_range(start=x['Start'], end=x['End'], freq='M')), axis=1)
df2['Interval'] = df2['Interval'].replace(offsets)
output = df1.merge(df2, on=['ID','Interval'], how='left')
output['Start'] = output['Start'].dt.strftime(date_format='%b-FY%y').str.upper()
output['End'] = output['End'].dt.strftime(date_format='%b-FY%y').str.upper()
</code></pre>
<p>输出</p>
<pre><code> ID Interval Start End
0 1 annual AUG-FY21 JUL-FY22
1 2 quarterly AUG-FY21 OCT-FY21
2 3 semiannual AUG-FY21 JAN-FY22
</code></pre>