【问题标题】:Replace timeseries missing values with previous years value用前几年的值替换时间序列缺失值
【发布时间】:2021-02-18 20:26:27
【问题描述】:

正如标题所示,我每小时的 df 看起来像这样:

                        date_time               traffic_volume
date_time       
2012-10-02 09:00:00     2012-10-02 09:00:00     5545.0
2012-10-02 10:00:00     2012-10-02 10:00:00     4516.0
2012-10-02 11:00:00     2012-10-02 11:00:00     NaN
2012-10-02 12:00:00     2012-10-02 12:00:00     NaN
2012-10-02 13:00:00     2012-10-02 13:00:00     NaN
2012-10-02 14:00:00     2012-10-02 14:00:00     NaN
2012-10-02 15:00:00     2012-10-02 15:00:00     5584.0
2012-10-02 16:00:00     2012-10-02 16:00:00     6015.0

我使用的大多数 NaN 估算值

df['traffic_volume'] = df['traffic_volume'].interpolate(method='time')

现在的问题是,对于时间序列的某个子集(剩余的 NaN),我想通过输入当天但去年的相同值来进行估算。 我用过

df['traffic_volume'] =  df.apply(lambda x: df.loc[ x['date_time'] + pd.offsets.DateOffset(years=-1)]['traffic_volume'] if x['traffic_volume']==np.NaN else x['traffic_volume'], axis=1)

代码行运行了,但我的 NaN 没有被估算。我的问题是为什么?如果有更好的方法是什么?

谢谢。

P.S 我不想使用 bfill、ffill 或 interpolate 的原因是因为 NaN 的序列太多,数据失去了粒度。

【问题讨论】:

    标签: python-3.x pandas time-series


    【解决方案1】:

    解决方法是使用pd.isna(x['traffic']) 而不是x['traffic_volume']==np.NaN 来处理lambda 中的if 条件。我仍然不明白为什么初始行运行但没有估算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 2019-08-06
      • 2013-01-17
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      相关资源
      最近更新 更多