按SCU_KEY、PRODUCT分组后有条件对REVENUE_STATUS_FLAG的NaN执行ffill填充
问题需求
我们需要仅对REVENUE_STATUS_FLAG列执行前向填充(ffill):只填充该列非空值之后出现的NaN,且填充操作必须严格按SCU_KEY(企业标识)和PRODUCT(产品类型)分组执行,不允许跨分组污染填充值。
原有代码问题说明
你原来的逐行判断逻辑存在缺陷:全局执行fillna(method='ffill')时本身就会跨分组填充,即使加了条件判断也无法避免不同分组的值互相影响,且写法冗余易出错。
优化后正确代码
pandas的groupby天然支持分组内单独执行变换操作,刚好匹配你的需求,一行代码即可实现效果:
# 按SCU_KEY、PRODUCT分组后,每组内单独对REVENUE_STATUS_FLAG做前向填充 df_SR5['REVENUE_STATUS_FLAG'] = df_SR5.groupby(['SCU_KEY', 'PRODUCT'])['REVENUE_STATUS_FLAG'].ffill()
效果验证
用你提供的输入示例执行上述代码后,输出结果和你给出的预期完全一致:
year SCU_KEY PRODUCT REVENUE_STATUS_FLAG 0 2019-02 3 HCM 1.0 1 2019-03 3 HCM 1.0 2 2019-04 3 HCM 1.0 3 2019-05 3 HCM 1.0 4 2018-03 4 HCM NaN 5 2018-04 4 HCM 0.0 6 2018-05 4 HCM 0.0 7 2017-04 4 EPM NaN 8 2017-05 4 EPM NaN 9 2019-06 5 SCM NaN 10 2019-07 5 SCM 0.0 11 2019-08 5 SCM 0.0
该写法逻辑清晰,相比逐行判断执行效率更高,尤其适合大数据量的时间序列数据集。
内容的提问来源于stack exchange,提问作者Deke Marquardt
相关产品推荐
相关产品推荐

