我有两个数据帧,一个是每周频率,另一个是每月频率:
df_week:
A B
2012-01-02 0.1 0.2
2012-01-09 0.4 0.3
2012-01-16 0.4 0.4
2012-01-23 0.3 0.3
2012-01-30 0.2 0.4
2012-02-06 0.1 0.5
每月数据(空):
df_monthly
A
2012-01-31 NaN
2012-02-29 NaN
2012-03-31 NaN
我想要做的是找出每个月的最后一周(例如,2012-01-30 2012年1月),然后查看日期前52周回归A超过B,并记录输入为df_monthly.loc [' 2012-01-31',' A']。到目前为止我所拥有的是循环遍历df_week:
for i in range(52, len(df_week)-1):
if df_week.index[i].month ~= df_week.index[i+1].month: #find out last week of the month
temp = df_week.iloc[i-52, :]
regress temp.A on temp.B
我现在有系数,sm.OLS.params [1]。但我不知道如何以简单的方式将其映射到df_monthly数据。从理论上讲,我需要在df_month找到索引j,其中:
df_month.index[j].month = df_week.index[i].month
答案 0 :(得分:1)
如果df_month
中只有一个条目要使用(我如何理解这个问题),那么你可以在索引上创建一个boolean mask来返回df_month
的正确行。
两个索引都需要是pandas datetime数据类型,因此您可以访问.month
如果你有C
的回归系数i
和索引df_week
,你可以做类似的事情
mask = (df_month.index.month == df_week.iloc[i].name.month)
df_month.loc[mask, 'A'] = C
# you can access row with just df_month[mask] also