【发布时间】:2020-12-30 02:31:51
【问题描述】:
我的数据看起来像这样
date ticker x y
0 2018-01-31 ABC 1 5
1 2019-01-31 ABC 2 6
2 2018-01-31 XYZ 3 7
3 2019-01-31 XYZ 4 8
所以这是一组年度观察结果。我想上采样到每月频率并向前填充新的观察结果。所以ABC看起来像
date ticker x y
0 2018-01-31 ABC 1 5
1 2018-02-28 ABC 1 5
...
22 2019-11-30 ABC 2 6
23 2019-12-31 ABC 2 6
请注意,我想填写最后一年,而不是直到最后一个日期。
现在我正在做类似的事情
newidx = df.groupby('ticker')['date'].apply(lambda x:
pd.Series(pd.date_range(x.min(),x.max()+YearEnd(1),freq='M'))).reset_index()
newidx.drop('level_1',axis=1,inplace=True)
df = pd.merge(newidx,df,on=['date','ticker'],how='left')
这显然是一种糟糕的方法。它真的很慢,但它确实有效。处理这个问题的正确方法是什么?
【问题讨论】:
-
我认为不可能有更快的方法,但更简洁的方法可能是:)
-
另一件事我意识到,由于两个数据框中的日期未对齐,您的方法没有给出预期的结果。
标签: python pandas panel-data