假设资产X的价格如下:
2004 NaN
2005 NaN
2006 246313.490770
2007 245557.678822
2008 NaN
2009 NaN
2010 246221.051892
多年来,X的值都缺失了。
我也有可比资产的价格,资产Y(资产Y从未有NaN价格):
2004 249008.038563
2005 248558.125114
2006 249644.313926
2007 249381.243924
2008 248739.371177
2009 249514.093672
2010 251120.103454
对于资产X(顶部矩阵)价格中的每个NaN,我想用资产X的最后一个非NaN值乘以中间年份的Y(botom矩阵)的增长率来替换NaN。 / p>
例如,2009年的替代值为:
245557.678822/249381.243924*249514.093672
(2007年的X值乘以2007年至2009年的Y增长率)
2004年和2005年的价值仍将是NaN&#39。但
我可以使用丑陋的嵌套循环对此进行编码,但我想知道是否在pandas中有一个优雅的两个衬垫来做到这一点(我有一个数据框,其中包含多个列X.1,X.2,...,散布的缺失值和没有缺失值的列Y)
答案 0 :(得分:2)
我认为您需要首先除以div
两列,然后按ffill
向前填充NaN
,最后乘以mul
:
print (X)
col1
2004 NaN
2005 NaN
2006 246313.490770
2007 245557.678822
2008 NaN
2009 NaN
2010 246221.051892
print (Y)
col1
2004 249008.038563
2005 248558.125114
2006 249644.313926
2007 249381.243924
2008 248739.371177
2009 249514.093672
2010 251120.103454
print (X.col1.div(Y.col1))
2004 NaN
2005 NaN
2006 0.986658
2007 0.984668
2008 NaN
2009 NaN
2010 0.980491
Name: col1, dtype: float64
print (X.col1.div(Y.col1).ffill())
2004 NaN
2005 NaN
2006 0.986658
2007 0.984668
2008 0.984668
2009 0.984668
2010 0.980491
Name: col1, dtype: float64
X['new'] = (X.col1.div(Y.col1).ffill().mul(Y.col1))
print (X)
col1 new
2004 NaN NaN
2005 NaN NaN
2006 246313.490770 246313.490770
2007 245557.678822 245557.678822
2008 NaN 244925.647401
2009 NaN 245688.491690
2010 246221.051892 246221.051892
print (245557.678822/249381.243924*249514.093672)
245688.4916900315