python - 如果连续日期不存在,如何根据'ent_id'和'val'列在PANDAS中执行FFILL(),否则需要完成填充?
问题描述
假设我有一个数据框
effective_date,ent_id,val
2020-02-03,101,aa
2020-02-03,102,bn
2020-02-03,103,bd
2020-02-03,105,bv
2020-02-03,106,bs
2020-02-03,107,ba
2020-02-03,109,be
2020-02-04,101,aa
2020-02-04,102,ab
2020-02-04,103,
2020-02-04,104,kl
2020-02-04,105,ad
2020-02-06,101,aa
2020-02-06,102,
2020-02-06,103,bd
2020-02-06,105,bv
2020-02-06,106,cs
2020-02-06,107,
2020-02-06,109,ce
2020-02-06,113,cd
2020-02-06,115,cv
2020-02-06,117,ca
现在我想在ent_id
和val
列的基础上执行前向填充逻辑,如果它在连续日期中不存在,它将对整个列和连续数据执行前向填充,例如2020-02-03,107,ba
在连续数据上它会被填充转发,2020-02-04,107,ba
但如果ent_id
andval
存在于连续日期它将在连续日期保持不变,没有其他列值受先前日期数据的影响,例如2020-02-03,103,bd
在连续日期它保持不变2020-02-04,103,
。
所以输出就像
effective_date,ent_id,val
2020-02-03,101,aa
2020-02-03,102,bn
2020-02-03,103,bd
2020-02-03,105,bv
2020-02-03,106,bs
2020-02-03,107,ba
2020-02-03,109,be
2020-02-04,101,aa
2020-02-04,102,ab
2020-02-04,103,
2020-02-04,104,kl
2020-02-04,105,ad
2020-02-04,106,bs
2020-02-04,107,ba
2020-02-04,109,be
2020-02-05,101,aa
2020-02-05,102,ab
2020-02-05,103,
2020-02-05,104,kl
2020-02-05,105,ad
2020-02-05,106,bs
2020-02-05,107,ba
2020-02-05,109,be
2020-02-06,101,aa
2020-02-06,102,
2020-02-06,103,bd
2020-02-06,104,kl
2020-02-06,105,bv
2020-02-06,106,cs
2020-02-06,107,
2020-02-06,109,ce
2020-02-06,113,cd
2020-02-06,115,cv
2020-02-06,117,ca
我的努力
(df.replace(np.nan,987654321).pivot(index='effective_date', columns='ent_id')
.ffill().asfreq('D',method='ffill')replace(987654321,np.nan).stack().reset_index()
)
这可以满足所有要求,但是请建议有更好的方法。
解决方案
推荐阅读
- json - 逻辑应用动态内容给出 null 或“”
- c++ - 查找模板相等运算符
- r - ggplot2:如何将我的自定义主题保存为(高分辨率)PDF
- node.js - 如何使用 ESCPOS API 模块在 Nodejs 中动态生成表行
- css - 动态更改css文件中背景图像的url路径
- python - Pandas 滚动求和过滤信号
- html - 重定向到另一个端口的按钮(后退按钮)
- r - 如何将 copula 的边缘建模为 R 中的学生 t 分布
- algorithm - 在多张发票上分配一笔款项
- django - django-rest ModelSerializer 选择要在嵌套关系中显示的字段