替换pandas数据框中的某些值

时间:2020-02-27 22:45:57

标签: pandas

我有一个这样的熊猫数据框:

     df 
                  Case   Type   Base
        Year
        2000      HI      PC1   0
        2001      HI      PC1   0
        2003      HI      PC1   2.0
        2004      HI      PC1   0
        2005      HI      PC2   0
        2006      HI      PC2   0
        2007      HI      PC2   2.0
        2008      HI      PC2   0
        2009      LO      PC1   0
        2010      LO      PC1   0
        2011      LO      PC1   2.0
        2012      LO      PC1   0
        2013      LO      PC2   0
        2014      LO      PC2   0
        2015      LO      PC2   2
        2016      LO      PC2   0

我想用值1代替['Base']列中的一些零值,而不是全部,所以最终的df看起来像这样:

          df 
                    Case   Type   Base
         Year
         2000      HI      PC1   1
         2001      HI      PC1   1
         2003      HI      PC1   2.0
         2004      HI      PC1   0
         2005      HI      PC2   1
         2006      HI      PC2   1
         2007      HI      PC2   2.0
         2008      HI      PC2   0
         2009      LO      PC1   1
         2010      LO      PC1   1
         2011      LO      PC1   2.0
         2012      LO      PC1   0
         2013      LO      PC2   1
         2014      LO      PC2   1
         2015      LO      PC2   2.0
         2016      LO      PC2   0

我使用了以下代码:

         df.groubpy(['Case','Type'].apply(lambda x: x.[0:3,3].replace({0:1})

但是我意识到我只得到2000到2001年之间的结果,而不是2000,2016年之间的结果。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

maskbfill

zeroes = df.Base.eq(0)
shiftd = zeroes.astype(int).shift().bfill()
df.assign(Base=df.Base.mask(zeroes).fillna(shiftd))

     Case Type  Base
Year                
2000   HI  PC1   1.0
2001   HI  PC1   1.0
2003   HI  PC1   2.0
2004   HI  PC1   0.0
2005   HI  PC2   1.0
2006   HI  PC2   1.0
2007   HI  PC2   2.0
2008   HI  PC2   0.0
2009   LO  PC1   1.0
2010   LO  PC1   1.0
2011   LO  PC1   2.0
2012   LO  PC1   0.0
2013   LO  PC2   1.0
2014   LO  PC2   1.0
2015   LO  PC2   2.0
2016   LO  PC2   0.0