将非缺失单元格的值扩展到 Pandas 中的后续行

问题描述

这就是我所拥有的:

df=pd.DataFrame({'A':[1,2,3,4,5],'B':[6,np.nan,np.nan]})
   A    B
0  1  6.0
1  2  NaN
2  3  NaN
3  4  3.0
4  5  NaN

我想将 B 的非缺失值扩展到 B 下面的缺失值,所以我有

   A    B    C 
0  1  6.0  6.0
1  2  NaN  NaN
2  3  NaN  NaN
3  4  3.0  3.0
4  5  NaN  NaN

我试过这样的事情,昨晚奏效了:

for i in df.index:
    df['C'][i]=np.where(pd.isnull(df['B'].iloc[i]),df['C'][i-1],df.B.iloc[i])

但是当我今天早上醒来时,它说它无法识别“C”。我无法确定它在什么条件下起作用和不起作用。

谢谢!

解决方法

您可以使用 pandas fillna() 方法用最后一个非空值向前填充缺失值。有关详细信息,请参阅 pandas documentation

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1,2,3,4,5],'B': [6,np.nan,np.nan]
})

df['C'] = df['B'].fillna(method='ffill')

df

#    A    B    C
# 0  1  6.0  6.0
# 1  2  NaN  6.0
# 2  3  NaN  6.0
# 3  4  3.0  3.0
# 4  5  NaN  3.0