熊猫:使用其他系列的增长率向后生长系列

时间:2018-09-12 17:38:49

标签: python pandas

我在一个系列的DataFrame开头缺少数据,我想通过使用另一个系列的增长率重新增加系列来填充这些NA。

df = pd.DataFrame({'X':[np.nan, np.nan, np.nan, 6, 6.7, 6.78, 7, 9.1], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 6.5, 6.80, 7.1, 9.12]})

      X     Y
0   NaN  5.40
1   NaN  5.70
2   NaN  5.50
3  6.00  6.10
4  6.70  6.50
5  6.78  6.80
6  7.00  7.10
7  9.10  9.12

即我想要的是:

df2 = pd.DataFrame({'X':[5.31147, 5.60656, 5.40984, 6, 6.7, 6.78, 7, 9.1], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 6.5, 6.80, 7.1, 9.12]})

因此,对于前几个原始缺失值,两个系列的增长率相同

df2.pct_change()

          X         Y
0       NaN       NaN
1  0.055556  0.055556
2 -0.035088 -0.035088
3  0.109091  0.109091
4  0.116667  0.065574
5  0.011940  0.046154
6  0.032448  0.044118
7  0.300000  0.284507

有什么想法吗?我已经找到了如何迭代回去并将输出保存到列表的方法,但是在此之前将其体积庞大,并且需要将其添加至原始DataFrame

1 个答案:

答案 0 :(得分:0)

你可以让

first_non_nan = df.X.isnull().idxmin()
changes = df.Y[:first_non_nan+1].pct_change()
while first_non_nan > 0:
    df.X[first_non_nan-1] = df.X[first_non_nan]/(changes[first_non_nan]+1)
    first_non_nan -= 1

结果:

In [48]: df
Out[48]:
          X     Y
0  5.311475  5.40
1  5.606557  5.70
2  5.409836  5.50
3  6.000000  6.10
4  6.700000  6.50
5  6.780000  6.80
6  7.000000  7.10
7  9.100000  9.12