python - 对 pandas 面板数据进行上采样

标签 python pandas panel-data

我的数据看起来像这样

    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')

这显然是一种糟糕的方法。它确实很慢,但确实有效。处理这个问题的正确方法是什么?

最佳答案

您的方法可能会很慢,因为您需要groupby,然后merge。让我们尝试使用 reindex 的另一个选项,这样您只需要 groupby:

(df.set_index('date')
   .groupby('ticker')
   .apply(lambda x: x.reindex(pd.date_range(x.index.min(),x.index.max()+YearEnd(1),freq='M'),
                              method='ffill'))
   .reset_index('ticker', drop=True)
   .reset_index()
)

关于python - 对 pandas 面板数据进行上采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63849236/

相关文章:

python - NumPy 数组的大小

python - 谷歌应用引擎错误,我现在无法打开它。(python)

python - 在 Django 中,如何从单个表单字段填充通用关系?

pandas - 根据列名求和 pandas 中的列

python - 加速 Pandas 通过请求申请 API 调用

python - 在两个 Dataframes Pandas 之间插入日期列

r - 用plm方法预测

python - mapnik 标记并不总是出现

r - 使用面板数据进行 ARIMA 建模

r - 将每日和定期数据合并到一个数据框中