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
也就是说,如果tenor
是quarter
,我只想显示delivery window
对应的季度,而不是月份。每月和每年的期限可以保持不变。
从 Jan YY
到 Mar YY
的月份 new_tenor
应该是 Q1 YY
,从 Apr YY
到 [=24] 的月份 Q2 YY
=]、Q3 YY
表示从 Jul YY
到 Sep YY
的月份,以及 Q4 YY
表示从 Oct YY
到 Dec 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
我在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
也就是说,如果tenor
是quarter
,我只想显示delivery window
对应的季度,而不是月份。每月和每年的期限可以保持不变。
从 Jan YY
到 Mar YY
的月份 new_tenor
应该是 Q1 YY
,从 Apr YY
到 [=24] 的月份 Q2 YY
=]、Q3 YY
表示从 Jul YY
到 Sep YY
的月份,以及 Q4 YY
表示从 Oct YY
到 Dec 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