Python:以第二个变量为条件将月份转换为季度

Python: Convert Months into Quarters conditional on second variable

我在R问了同样的问题,得到了答案,希望Python也能得到。

我有一个如下所示的数据集:

 tenor   delivery_window
 <chr>   <chr>          
 1 month   Nov 22         
 2 quarter Jan 22         
 3 year    Cal 24         
 4 year    Cal 22         
 5 month   Feb 22         
 6 quarter Jan 21         
 7 month   Sep 22         
 8 quarter Jan 21         
 9 month   Jun 21         
10 month   Aug 21         

我想把它变成这样的东西:

 tenor   delivery_window new_tenor
 <chr>   <chr>           <chr>    
 1 month   Nov 22          Nov 22   
 2 quarter Jan 22          Q1 22    
 3 year    Cal 24          Cal 24   
 4 year    Cal 22          Cal 22   
 5 month   Feb 22          Feb 22   
 6 quarter Jan 21          Q1 21    
 7 month   Sep 22          Sep 22   
 8 quarter Jan 21          Q1 21    
 9 month   Jun 21          Jun 21   
10 month   Aug 21          Aug 21  

也就是说,如果tenorquarter,我只想显示delivery window对应的季度,而不是月份。每月和每年的期限可以保持不变。

Jan YYMar YY 的月份 new_tenor 应该是 Q1 YY,从 Apr YY 到 [=24] 的月份 Q2 YY =]、Q3 YY 表示从 Jul YYSep YY 的月份,以及 Q4 YY 表示从 Oct YYDec YY 的月份。

有人可以再次帮助我吗?提前谢谢你。

我想这就是您要找的:

def ConvtoQuarter(tenor, delivery):
  if tenor == "quarter":
    if delivery[:3] in ['Jan', 'Feb', 'Mar']:
      return "Q1 "+delivery[-2:]
    elif delivery[:3] in ['Apr', 'May', 'Jun']:
      return "Q2 "+delivery[-2:]
    elif delivery[:3] in ['Jul', 'Aug', 'Sep']:
      return "Q3 " + delivery[-2:]
    elif delivery[:3] in ['Oct', 'Nov', 'Dec']:
      return "Q4 " + delivery[-2:]
  else:
      return delivery
df = pd.DataFrame({"tenor":['month', 'quarter', 'year', 'year', 'month', 'quarter'],
                   "delivery":['Nov 22', 'Jan 22', 'Cal 22', 'Cal 22', 'Feb 22', 'Jan 21']})
df['NewTenor'] = df.apply(lambda x: ConvtoQuarter(x['tenor'], x['delivery']), axis=1)
df

输出:

tenor   delivery    NewTenor
0   month   Nov 22  Nov 22
1   quarter Jan 22  Q1 22
2   year    Cal 22  Cal 22
3   year    Cal 22  Cal 22
4   month   Feb 22  Feb 22
5   quarter Jan 21  Q1 21