2017-03-17 117 views
2

我想用取決於最後一個非= NaN值的值填充列中的缺失(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」和「J」,如果最後值爲「Y」。即

Out[5]: # How do I get this? 
    0 
0 X 
1 I 
2 I 
3 Y 
4 J 
5 J 
6 X 
7 I 

我相信我可以用循環做到這一點,但我怎麼做,而不訴諸於此?

回答

6

可以創建字典前述值映射到所需的填充值,則使用fillna與數據幀的向前填充版本與所述映射通過使用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 
+0

非常聰明!非常感謝。 –

+0

聰明+簡單==很棒的答案 – piRSquared

相關問題