用前一个值乘以常数填充nan值的列



我有一个df,其中一些列以多个nan值结尾。我想使用fillna(method=' fill')或类似的东西将每个nan值与前一个值*另一个df的一些常数相乘。然而,仅仅使用以下方法是行不通的。在移动到下一个之前,它需要计算每个col值,这是问题吗?

df_new = df.fillna(method='ffill') * constant 

有趣的问题!这不是一个矢量化的解决方案,但它可以在逐列的基础上工作。

首先设置数据以进行测试-设置索引到日期,这样我们就不依赖于索引号来帮助

A = [np.nan, np.nan, 5.5, 5.7, 5.9, 6.1, 6.0, 5.9, np.nan, np.nan, np.nan,15.0]
df = pd.DataFrame({'A': A}, index=pd.date_range(start='2010', periods=len(A), freq="QS"))

A
2010-01-01  NaN
2010-04-01  NaN
2010-07-01  5.5
2010-10-01  5.7
2011-01-01  5.9
2011-04-01  6.1
2011-07-01  6.0
2011-10-01  5.9
2012-01-01  NaN
2012-04-01  NaN
2012-07-01  NaN
2012-10-01  15.0

for id in df[df.A.isnull() == True].index:
df.loc[id, 'A'] = 1.025 * df.A.shift().loc[id] 

A
2010-01-01  NaN
2010-04-01  NaN
2010-07-01  5.500000
2010-10-01  5.700000
2011-01-01  5.900000
2011-04-01  6.100000
2011-07-01  6.000000
2011-10-01  5.900000
2012-01-01  6.047500
2012-04-01  6.198687
2012-07-01  6.353655
2012-10-01  15.000000

现在需要循环遍历想要向前填充的列

最新更新