如何用行的上一个和下一个值的平均值逐行填充fillna()?

时间:2019-08-09 17:10:03

标签: python pandas fillna

我想将nans替换为:

-如果nan位于两列中间,且各值均带有两列的平均值(上一列和下一列)

-否则,我希望该值保持系列的相同路径。

例如:

In[1]:
df = pd.DataFrame([[1, 2,np.nan,np.nan], [np.nan, 4,6,8],[3,np.nan,6,np.nan]], columns=['A', 'B','C','D'])

Out[2]: 
     A    B    C    D
0  1.0  2.0  NaN  NaN
1  NaN  4.0  6.0  8.0
2  3.0  NaN  6.0  NaN

Desired output:

Out[2]: 
     A    B    C   D
0  1.0  2.0  4.0  6.0
1  3.0  4.0  6.0  8.0
2  3.0  4.0  6.0  8.0

我尝试失败,

for col in df.columns:
    for i in range(len(df.columns)-1):
        prev=df[df.columns[i-1]]
        nextval=df[ds.columns[i+1]]
        df[col]=df[col].fillna((nextval+prev)/2)

1 个答案:

答案 0 :(得分:2)

您可以使用 fillna() 两次:一次使用方法“bfill”,一次使用方法“ffill”,然后对它们求平均值。