我在一个系列的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
答案 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