我正在尝试合并季度系列和月度系列,在这个过程中;下采样";季度系列。这两个数据帧都包含一个DATE列BANK,其余列是不同的值,可以是月度格式,也可以是季度格式。我遇到的复杂情况是它是一个多索引,所以如果我尝试:
merged_data=df1.join(df2).reset_index(['DATE', 'BANK_CODE']).ffill()
直到最后一个月数据点的季度数据的正向填充并没有按照我的意图为每个银行完成。有人能帮忙吗?注意:我也尝试过单独对季度数据帧进行重新采样,但在某个日期(应该是月度数据中的最新日期(之前,我不知道如何将其降到月度水平。
df2 = df2.set_index(['DATE']).groupby(['BANK']).resample('M')['VALUE'].ffill()
df1:
Date Bank Value1 Value2
2021-06-30 bank 1 2000 7000
2021-07-31 bank 1 3000 2000
2021-06-30 bank 2 6000 9000
df2:
Date Bank Value1 Value2
2021-06-30 bank 1 2000 5000
2021-09-30 bank 1 5000 4000
2021-06-30 bank 2 9000 10000
这是一个小例子
使用提供的数据,假设df1是每月一次,df2是每季度一次。
设置索引并将季度数据重新采样为每月:
# monthly data
x1 = df1.set_index(['Bank','Date'])
# quarterly data, resampling back to monthly
x2 = ( df2.set_index('Date')
.groupby('Bank')
.resample('M')
.ffill()
.drop(columns='Bank')
)
合并两者-我想你想要的是产品,而不是联合:
x1.join(x2, lsuffix='_m', rsuffix='_q', how='outer').fillna(0)
Value1_m Value2_m Value1_q Value2_q
Bank Date
bank 1 2021-06-30 2000.0 7000.0 2000 5000
2021-07-31 3000.0 2000.0 2000 5000
2021-08-31 0.0 0.0 2000 5000
2021-09-30 0.0 0.0 5000 4000
bank 2 2021-06-30 6000.0 9000.0 9000 10000
_m是来自df1的值就足够了,_q是来自df2的值。我想你会知道如何解释或处理同一日期的月度和季度价值之间的差异。
正如您所看到的,无需指定间隔,这是自动提供的。