如何为股票数据的月度首个交易日添加Dummy variable(D_FoM)列
解决DataFrame新增月度首个交易日标记列的问题
嘿,我来帮你搞定这个需求!你已经成功筛选出了月度首个交易日的数据,现在只需要把这些日期标记到原DataFrame里就可以啦,步骤其实很简单:
首先先修正你原代码里的一个小问题——导入语句要分开写,不能连在一起:
import pandas_datareader as web import pandas as pd import numpy as np import datetime as dt
接下来获取数据并处理索引(注意:google数据源目前已失效,建议改用'yahoo';如果是你自己的本地数据,直接跳过数据源部分即可):
# 获取AAPL数据 df = web.DataReader('AAPL', 'yahoo') # 如果你的数据里单独有Date列,才需要执行下面这行;用yahoo数据源的话,索引本身就是日期,可跳过 # df = df.set_index(pd.to_datetime(df['Date'])) df.sort_index(inplace=True)
然后提取所有月度首个交易日的日期:
# 按月度起始频率分组,取每组第一行,提取这些行的索引(即目标日期) first_trading_days = df.groupby(pd.Grouper(freq='MS')).nth(0).index
最后新增D_FoM列并完成标记:
# 先给所有行默认设为0 df['D_FoM'] = 0 # 把月度首个交易日对应的单元格设为1 df.loc[first_trading_days, 'D_FoM'] = 1
这样你就能看到原DataFrame里多了一列D_FoM,只有每个月第一个交易日的行是1,其他都是0啦。
确实如你所说,R里用dplyr这类工具处理分组标记可能会更简洁,但Python里这个写法也很直观,完全能满足需求~
内容的提问来源于stack exchange,提问作者completen00b
相关产品推荐
相关产品推荐

