我正在尝试解决如何重新采样以下数据的问题。诀窍是在重采样期间需要维护两个变量(标识符和变量)。
我尝试使用以下代码重新采样:
df.set_index('date').to_period('d').resample('d').fillna(method='ffill')
但它不允许我给出索引不是唯一的。所以,我想也许如果我把它扩展到多层列,我可以重新采样重新形状的数据帧,同时保持标识符和变量信息。
原始数据格式如下:
date, identifier, variable, value
2018-04-01, BBN, M3M, 24
2018-04-07, BBN, M3M, 25
2018-04-14, BBN, M3M, 25
2018-04-21, BBN, M3M, 25
2018-04-01, BBN, M12M, 48
2018-04-07, BBN, M12M, 52
2018-04-14, BBN, M12M, 50
2018-04-21, BBN, M12M, 49
2018-04-01, MXP, M3M, 18
2018-04-07, MXP, M3M, 20
2018-04-14, MXP, M3M, 25
2018-04-21, MXP, M3M, 22
2018-04-01, MXP, M12M, -10
2018-04-07, MXP, M12M, -12
2018-04-14, MXP, M12M, -14
2018-04-21, MXP, M12M, -18
预期重塑:
identifier BBN, MXP
variable M3M, M12M,M3M,M12M
date 2018-04-01, 24, 48, 18, -10
date 2018-04-07, 25, 52, 20, -12
date 2018-04-14, 25, 50, 25, -14
date 2018-04-21, 25, 49, 22, -18
我认为,一旦采用这种格式,日期索引应该是唯一的,那么我将能够重新采样数据以包括缺失的天数。我只是不确定如何透过表来获取多级列。
任何机构都可以指出我正确的方向,或提供任何帮助或建议???
答案 0 :(得分:0)
使用set_index
和unstack
df.set_index(['date','identifier','variable'])['value'].unstack([1,2])
Out[558]:
identifier BBN MXP
variable M3M M12M M3M M12M
date
2018-04-01 24 48 18 -10
2018-04-07 25 52 20 -12
2018-04-14 25 50 25 -14
2018-04-21 25 49 22 -18
或pivot_table
df.pivot_table(index='date',columns=['identifier','variable'],values='value')
Out[560]:
identifier BBN MXP
variable M12M M3M M12M M3M
date
2018-04-01 48 24 -10 18
2018-04-07 52 25 -12 20
2018-04-14 50 25 -14 25
2018-04-21 49 25 -18 22