python - 熊猫填补缺失的时间序列数据
问题描述
我有一个时间序列数据框,其中包含如下数据:
Week_Ending | 销售量 |
---|---|
2021 年 8 月 5 日 | 1000 |
2021 年 8 月 12 日 | 1122 |
2021 年 8 月 19 日 | 980 |
楠 | 1000 |
楠 | 1234 |
一周结束日期有时会丢失,我希望丢失的日期等于前一个日期 + 7 天。因此,nan 值应分别为 '08/26/2021' 和 '09/02/2021'。我怎样才能做到这一点?我试过玩插值,但没有任何改变。
解决方案
尝试:
# 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
推荐阅读
- javascript - 在 Javascript 中对动态 Html 表进行数学运算?
- python - 在 python 中打包和解包浮点值
- javascript - 在我的情况下,如何只使用一次反应钩子 useEffect ?
- android - 未调用材质暴露下拉菜单 OnItemSelectedListener
- angular - Angular Jest 或 Jasmine 测试:如何正确监视/模拟从测试类中调用的静态对象?
- single-sign-on - Jumpcloud 应用程序中自定义 SAML 连接器的 SAML SSO 身份验证流程
- jmeter - 在页面表单上打开数据选择框时出现 Jmeter 记录问题。同一页面上的第二帧获取 URL 编码并从服务器获取 404
- c# - 如何修复我的等待和重复代码?我无法单击重复操作的按钮
- c# - Rx .NET:ToTask vs LastAsync vs RunAsync
- spring-boot - kotlin抽象类在spring boot中反序列化