我有两个数据框,一个是每周频率,一个是每月频率:
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年1月为2012-01-30),然后查看该日期之前的52周进行A over 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
最佳答案
如果df_month
中只有一个条目您想使用(我如何理解这个问题)而不是您可以在索引上创建 bool 掩码以返回 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
关于python - 按月匹配两个数据框索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591644/