tianfu668 2023-03-04 17:52 采纳率: 80%
浏览 30

季度财报关联到股票日行情

已提取股票的日行情清单到dataframe,名字DF,关键字为ts_code,trade_date,现在要将财报的数据净利润关键字income根据发布时间ann_date和财报季度时间end_date,dataframe名为Df_qua,将income同步赋值到每天的数据中,请问如何用python编程更快

  • 写回答

1条回答 默认 最新

  • 陈书予 2023年6月份城市(北京)之星TOP 1 2023-03-04 18:15
    关注

    可以使用pandas的merge函数将日行情清单和财报数据按照ts_code和trade_date以及ts_code和end_date进行合并,从而将income同步赋值到每天的数据中。具体实现步骤如下:

    1. 将Df_qua中的ann_date列转换为trade_date列,以便与日行情清单按照trade_date合并。可以使用pandas的to_datetime函数将ann_date列转换为datetime格式,然后使用dt属性获取年份和季度信息,计算出对应的季度末时间,并将其赋值给新列end_date。
    Df_qua['trade_date'] = pd.to_datetime(Df_qua['ann_date'], format='%Y%m%d').dt.to_period('Q').dt.end_time.dt.strftime('%Y%m%d')
    
    1. 将DF和Df_qua按照ts_code和trade_date进行内连接,得到包含日行情和财报数据的新的dataframe DF_merged1,其中income列为Df_qua中的数据。
    DF_merged1 = pd.merge(DF, Df_qua[['ts_code', 'trade_date', 'income']], on=['ts_code', 'trade_date'], how='inner')
    
    1. 将DF_merged1中的ts_code和end_date进行内连接,得到包含日行情和财报数据的新的dataframe DF_merged2,其中income列为Df_qua中的数据。
    DF_merged2 = pd.merge(DF_merged1, Df_qua[['ts_code', 'end_date', 'income']], on=['ts_code', 'end_date'], how='inner')
    
    1. 将DF_merged2中的income列同步赋值到每天的数据中,可以使用groupby函数按照ts_code和trade_date进行分组,然后使用fillna函数填充缺失值
    DF_merged2['income'] = DF_merged2.groupby(['ts_code', 'trade_date'])['income'].transform(lambda x: x.ffill())
    DF_merged2['income'] = DF_merged2.groupby(['ts_code'])['income'].fillna(method='ffill')
    

    完整代码入下

    import pandas as pd
    
    # 将ann_date转换为trade_date格式
    Df_qua['trade_date'] = pd.to_datetime(Df_qua['ann_date'], format='%Y%m%d').dt.to_period('Q').dt.end_time.dt.strftime('%Y%m%d')
    
    # 将DF和Df_qua按照ts_code和trade_date进行内连接
    DF_merged1 = pd.merge(DF, Df_qua[['ts_code', 'trade_date', 'income']], on=['ts_code', 'trade_date'], how='inner')
    
    # 将DF_merged1和Df_qua按照ts_code和end_date进行内连接
    DF_merged2 = pd.merge(DF_merged1, Df_qua[['ts_code', 'end_date', 'income']], on=['ts_code', 'end_date'], how='inner')
    
    # 将DF_merged2中的income按ann_date进行重复值填充(ffill),并按照trade_date进行排序
    DF_merged2['income'] = DF_merged2.groupby('ts_code')['income'].fillna(method='ffill')
    DF_merged2 = DF_merged2.sort_values(by=['ts_code', 'trade_date']).reset_index(drop=True)
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月4日

悬赏问题

  • ¥15 sanf语句学习输入时遇到问题
  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用