Home > other >  Python: Convert Months into Quarters conditional on second variable
Python: Convert Months into Quarters conditional on second variable

Time:05-24

I asked the same question for R and I obtained the answer, I hope to obtain it for Python too.

I have a dataset that looks like this:

 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         

And which I want to turn into something like this:

 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  

That is, if the tenor is quarter, I want to show only the quarter corresponding to the delivery window, not the month. Monthly and Yearly tenors can remain as they are.

The new_tenor should be Q1 YY for months from Jan YY to Mar YY, Q2 YY for months from Apr YY to Jun YY, Q3 YY for months from Jul YY to Sep YY, and Q4 YY for months from Oct YY to Dec YY.

Can someone please help me again? Thank you in advance.

CodePudding user response:

I think this is what you're looking for:

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

Output:

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
  • Related