熊猫:用其他列

时间:2016-11-08 12:13:29

标签: pandas

假设资产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)

1 个答案:

答案 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