已提取股票的日行情清单到dataframe,名字DF,关键字为ts_code,trade_date,现在要将财报的数据净利润关键字income根据发布时间ann_date和财报季度时间end_date,dataframe名为Df_qua,将income同步赋值到每天的数据中,请问如何用python编程更快
1条回答 默认 最新
关注 可以使用pandas的merge函数将日行情清单和财报数据按照ts_code和trade_date以及ts_code和end_date进行合并,从而将income同步赋值到每天的数据中。具体实现步骤如下:
- 将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')
- 将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')
- 将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')
- 将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)
解决 1无用 1
悬赏问题
- ¥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 没用