python-3.x - 用前几年的值替换时间序列缺失值
问题描述
正如标题所示,我每小时的 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 没有被估算。我的问题是为什么?如果有更好的方法是什么?
谢谢你。
PS我不想使用bfill,ffill或interpolate的原因是因为NaN的序列太多并且数据失去了粒度。
解决方案
修复方法是使用pd.isna(x['traffic'])
而不是x['traffic_volume']==np.NaN
for 中的if
条件lambda
。我仍然不明白为什么初始行运行但没有估算。
推荐阅读
- android - 添加隐式广播异常?
- php - 仅允许附加的身份验证用户 [课程所有者] 访问课程查看页面 [LARAVEL 政策]
- scala - 用于分区过滤的 Spark 目录查找可以并行吗?
- reactjs - 功能性 React 组件生命周期
- jenkins - 在 Jenkins 中归档文件时如何保持文件夹结构?
- ksqldb - PUSH查询期间的KSQLDB java客户端错误
- json - 从 powershell 中的 JSON 对象中删除一个属性
- html - 在导航栏上对齐左元素和右元素时遇到问题
- quicksort - 我的 3 路分区快速排序算法有什么问题?
- aws-glue - AWS Glue - 数据沿袭和作业跟踪