0

我正在尝试合并季度系列和月度系列,并在此过程中基本上“下采样”季度系列。两个数据框都包含一个 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

这是一个小例子

4

1 回答 1

0

使用提供的数据,假设 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。我假设您会知道如何解释或处理同一日期的月度值和季度值之间的差异。

如您所见,无需指定间隔,这是自动提供的。

于 2022-01-05T13:25:58.840 回答