为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫-产生最后一位数字后的下一个最近年份

熊猫-产生最后一位数字后的下一个最近年份

临摹微笑 2021-05-21 11:10:55
在计算某些金融工具的到期日时,通常我们需要做的只是以下几点:Trade Date  RIC5/22/1989   SPH05/23/1989   SPH05/24/1989   SPH05/25/1989   SPH05/26/1989   SPH0如果交易日期是工具的交易日,那么RIC是4个字母的字符串,其中包括:First 2 characters = an asset class3rd character = expiration monthlast character = last digit of expiration year到期月份说明:month_codes_to_int = {'F':'1', 'G':'2', 'H':'3', 'J':'4', 'K':'5', 'M':'6',              'N':'7', 'Q':'8', 'U':'9', 'V':'10', 'X':'11', 'Z':'12'}我通过使用交易日期和RIC为每一行生成一个到期年...我这样做是通过遍历DF并每次使用将正确计算到期日期的函数填充列中的空白单元格来实现的。for index, row in df.iterrows():    row['Trade Date'] = pd.to_datetime(row['Trade Date'])    print(row['Trade Date'], row['RIC'])    current_year = row['Trade Date'].year    asset_class = row['RIC'].split[0:3]    expiration_month = row['RIC'][2]    expiration_year_last_digit = row['RIC'][3]    expiration_year = 我的方法是让到期日期是与当前日期相距最近的月份和年份,因此,以1989年5月22日为例,该日期应为1990年3月15日(日期无关紧要,1990年为最接近的日期)年份从0到1989年结束)。有没有一种方法可以使用pandas datetime功能自动执行此操作?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

首先,创建包含月份,年份以及TradeDate列的最后一位的系列。


m = df.RIC.str[2].map(month_codes_to_int)

y = df.RIC.str[3].astype(int)

s = df.TradeDate.dt.year.mod(10)

然后计算您的偏移量:


offset = np.where(y==s, 0, 10+y-s)

最后,创建您的新列:


pd.to_datetime((df.TradeDate.dt.year + offset).astype(str) + m, format='%Y%m')

输出:


0   1990-03-01

1   1990-03-01

2   1990-03-01

3   1990-03-01

4   1990-03-01

dtype: datetime64[ns]


查看完整回答
反对 回复 2021-05-25
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号