【问题标题】:How to perform forward fill logic in PANDAS based on 'ent_id' if it does not exist for successive date then perform forward fill?如果连续日期不存在,如何基于'ent_id'在PANDAS中执行前向填充逻辑然后执行前向填充?
【发布时间】:2021-05-27 20:39:56
【问题描述】:

假设我有一个数据框

effective_date,ent_id,val
2020-02-03,101,aa
2020-02-03,102,ab
2020-02-03,103,ac
2020-02-03,105,ad

2020-02-04,107,ba
2020-02-04,103,bd
2020-02-04,105,bv
2020-02-04,106,bs
2020-02-04,109,be
2020-02-04,102,bn

2020-02-05,117,ca
2020-02-05,113,cd
2020-02-05,115,cv
2020-02-05,106,cs
2020-02-05,109,ce
2020-02-05,102,cn

并且输出将是这样的,即如果 ent_id 在连续日期不存在,则向前填充它 例如在有效日期“2020-02-04”上,我们没有 ent_id 为 101,因此它被填充转发到下一个日期,即 2020-02-04,101,aa,其他日期也类似

effective_date,ent_id,val
2020-02-03,101,aa
2020-02-03,102,ab
2020-02-03,103,ac
2020-02-03,105,ad

2020-02-04,101,aa
2020-02-04,107,ba
2020-02-04,103,bd
2020-02-04,105,bv
2020-02-04,106,bs
2020-02-04,109,be
2020-02-04,102,bn

2020-02-05,101,aa
2020-02-05,107,ba
2020-02-05,103,bd
2020-02-05,105,bv
2020-02-05,117,ca
2020-02-05,113,cd
2020-02-05,115,cv
2020-02-05,106,cs
2020-02-05,109,ce
2020-02-05,102,cn

我的努力

df['effective_date'] = pd.to_datetime(df['effective_date'])

df1 = (df.set_index(['effective_date',df.groupby('effective_date').cumcount()])
         .unstack()
         .ffill()
         .stack()
         .reset_index(level=1, drop=True)
         .reset_index())

但它没有提供预期的输出

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    您可以只旋转、填充,然后取消堆叠:

    (df.pivot(index='effective_date', columns='ent_id')
       .ffill().stack().reset_index()
    )
    

    输出:

       effective_date  ent_id val
    0      2020-02-03     101  aa
    1      2020-02-03     102  ab
    2      2020-02-03     103  ac
    3      2020-02-03     105  ad
    4      2020-02-04     101  aa
    5      2020-02-04     102  bn
    6      2020-02-04     103  bd
    7      2020-02-04     105  bv
    8      2020-02-04     106  bs
    9      2020-02-04     107  ba
    10     2020-02-04     109  be
    11     2020-02-05     101  aa
    12     2020-02-05     102  cn
    13     2020-02-05     103  bd
    14     2020-02-05     105  bv
    15     2020-02-05     106  cs
    16     2020-02-05     107  ba
    17     2020-02-05     109  ce
    18     2020-02-05     113  cd
    19     2020-02-05     115  cv
    20     2020-02-05     117  ca
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2016-10-20
      • 2022-06-24
      • 2016-11-30
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多