【问题标题】:merging quarterly and monthly data while doing ffill on multiindex在填充多索引时合并季度和月度数据
【发布时间】:2021-12-29 18:34:02
【问题描述】:

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

HERE IS A MINI EXAMPLE

【问题讨论】:

  • 会显示之前的数据和预期的输出数据吗?
  • 金狮,之前的数据如上图(两个数据框)。我是这个平台的新手,在 RJ 帮助我之前,我什至无法正确展示它(谢谢 RJ)。预期输出是每月频率的季度数据,其中的差距由值填补。因此,为什么我尝试重新采样到每月并向前填写上面的代码。

标签: python pandas merge pandas-resample ffill


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2023-03-14
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多