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

时间:2017-03-17 17:00:18

标签: python pandas numpy

我想在列中填充缺少的(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

我知道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

例如,如果最后一个值是'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

我确信我可以通过循环执行此操作,但如何在不诉诸此操作的情况下执行此操作?

1 个答案:

答案 0 :(得分:6)

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

nan_map = {'X': 'I', 'Y': 'J'}
A = A.fillna(A.replace(nan_map).ffill())

结果输出:

   0
0  X
1  I
2  I
3  Y
4  J
5  J
6  X
7  I