【问题标题】:Pandas fill missing time series data熊猫填补缺失的时间序列数据
【发布时间】:2021-09-08 19:25:31
【问题描述】:

我有一个时间序列数据框,其中包含如下数据:

Week_Ending Sales
8/5/2021 1000
8/12/2021 1122
8/19/2021 980
nan 1000
nan 1234

有时会丢失一周结束日期,我希望丢失的日期等于前一个日期 + 7 天。因此,nan 值应分别为 '08/26/2021' 和 '09/02/2021'。我怎样才能做到这一点?我尝试过使用插值,但没有任何变化。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    试试:

    # convert if necessary:
    df["Week_Ending"] = pd.to_datetime(df["Week_Ending"])
    
    mn = df["Week_Ending"].min()
    df["Week_Ending"] = [mn + pd.Timedelta(days=7 * i) for i in df.index]
    print(df)
    

    打印:

      Week_Ending  Sales
    0  2021-08-05   1000
    1  2021-08-12   1122
    2  2021-08-19    980
    3  2021-08-26   1000
    4  2021-09-02   1234
    

    编辑:

    mask = df["Week_Ending"].isna()
    df.loc[mask, "tmp"] = df.groupby((mask != mask.shift()).cumsum()).cumcount() + 1
    df["Week_Ending"] = df["Week_Ending"].ffill()
    df.loc[mask, "Week_Ending"] = df[mask].apply(
        lambda x: x["Week_Ending"] + pd.Timedelta(days=7 * x["tmp"]), axis=1
    )
    df = df.drop(columns="tmp")
    
    print(df)
    

    打印:

      Week_Ending  Sales
    0  2021-08-05   1000
    1  2021-08-12   1122
    2  2021-08-19    980
    3  2021-08-26   1000
    4  2021-09-02   1234
    5  2021-09-19    980
    6  2021-09-26   1234
    

    df 已使用:

      Week_Ending  Sales
    0  2021-08-05   1000
    1  2021-08-12   1122
    2  2021-08-19    980
    3         NaT   1000
    4         NaT   1234
    5  2021-09-19    980
    6         NaT   1234
    

    【讨论】:

    • 感谢安德烈的尝试!我认为你很接近,但不完全是我想要的。当我运行您的代码时,它通过在最小日期添加 7 然后在下一个 nan 中添加 7 来填充 nans。这导致最小的日期是 2016/01/01,然后我们有一年半的非缺失值,下一个缺失值被填充为 2016/01/07 而不是说 2017/07/01或类似的东西。然后,如果有更多的非缺失值后跟一个 nan,那么 nan 也被填满了,比如说 2016/01/14
    • 我只需要它在上一行的日期值上加一个 7 而不是上一个 nan
    • 而不是代码中使用的最小值,它应该说上一行,但我不知道该怎么做。此外,我不是那个投反对票的人,我真的很感谢我能得到的任何帮助!
    • 嗨,Andrej,还没有尝试过您的编辑版本,但回来说实际上您的原始版本就像一个魅力!我只需要重置我的索引。非常感谢!
    猜你喜欢
    • 2018-04-24
    • 2016-05-11
    • 2018-08-14
    • 2020-06-18
    • 2019-03-03
    • 2021-11-11
    • 2020-03-19
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多