2016-02-15 26 views
1

我有一個熊貓系列,我想填充最後一個不是nan的值。例如,熊貓系列如何用最後一個有效值填充na

a=pd.Series({1: 1918, 2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831}) 
Out[113]: 
1 1918 
2 1928 
3  NaN 
4  NaN 
5  NaN 
6 1853 
7 1831 
dtype: float64 

我想是這樣的:

a=pd.Series({1: 1918, 
2: 1928, 
3: np.nan, 
4: np.nan, 
5: 1928, 
6: 1853, 
7: 1831}) 

有一種優雅的方式來做到這一點?我試過看fillna,但它沒有這個選項,我正在尋找。它將填滿價值3與1928或價值5與1853(使用限制= 1),但這不是我正在尋找。最終目標是基於這些數據做一個返回序列,當一個值爲nan時,使用最後一個不是nan的可用數據。所以一個新的迴歸系列應該給現貨6,1853/1928 -1。

回答

1

您可以通過isnullshift創建模板,然後使用locfillna

import pandas as pd 
import numpy as np 

a=pd.Series({1: 1918, 2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831}) 
print a 
1 1918 
2 1928 
3  NaN 
4  NaN 
5  NaN 
6 1853 
7 1831 
dtype: float64 

print ~(pd.isnull(a) & pd.isnull(a.shift(-1))) 
1  True 
2  True 
3 False 
4 False 
5  True 
6  True 
7  True 
dtype: bool 

a.loc[ ~(pd.isnull(a) & pd.isnull(a.shift(-1)))] = a.fillna(method='ffill') 
print a 
1 1918 
2 1928 
3  NaN 
4  NaN 
5 1928 
6 1853 
7 1831 
dtype: float64 
+0

謝謝。我實際上正在使用一個數據框(儘管我在問題中提到了一系列)。所以我只是刪除了.loc,它的工作原理。 – user2015487