我有一个这样的熊猫数据框:
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年之间的结果。
谢谢您的帮助。
答案 0 :(得分:2)
mask
和bfill
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