根据最后一个值在数据框列中填充NaN

Cap*_*pet 2 python numpy pandas

我想在列中填充缺少的(NaN)值,其值取决于最后的非= NaN值.我的数据看起来像这样:

In [3]: A = pd.DataFrame(['X', np.nan, np.nan, 'Y',np.nan, np.nan, 'X', np.nan])

In [4]: A
Out[4]:
     0
0    X
1  NaN
2  NaN
3    Y
4  NaN
5  NaN
6    X
7  NaN
Run Code Online (Sandbox Code Playgroud)

我知道这个fillna功能,但这不是我想做的.这给了我以下内容:

In [5]: A.fillna(method='ffill') # Not what I want to do
Out[5]:
   0
0  X
1  X
2  X
3  Y
4  Y
5  Y
6  X
7  X
Run Code Online (Sandbox Code Playgroud)

例如,如果最后一个值是'X',我想填写'I',如果最后一个值是'Y',我想填写'J'.即

Out[5]: # How do I get this?
   0
0  X
1  I
2  I
3  Y
4  J
5  J
6  X
7  I
Run Code Online (Sandbox Code Playgroud)

我确信我可以用循环来做到这一点,但是如何在不诉诸于此的情况下做到这一点?

roo*_*oot 6

您可以创建将前一个值映射到所需填充值的字典,然后使用fillnaDataFrame的前向填充版本,并使用replace和应用映射ffill:

nan_map = {'X': 'I', 'Y': 'J'}
A = A.fillna(A.replace(nan_map).ffill())
Run Code Online (Sandbox Code Playgroud)

结果输出:

   0
0  X
1  I
2  I
3  Y
4  J
5  J
6  X
7  I
Run Code Online (Sandbox Code Playgroud)