首页 > 解决方案 > 熊猫填补缺失的时间序列数据

问题描述

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

Week_Ending 销售量
2021 年 8 月 5 日 1000
2021 年 8 月 12 日 1122
2021 年 8 月 19 日 980
1000
1234

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

标签: pythonpython-3.xpandasdataframe

解决方案


尝试:

# 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

推荐阅读