2017-06-15 101 views
1

我有一个数据帧:大熊猫回填楠递增的最后一个值

  A B C 
Timestamp 
    1  NaN NaN NaN 
    2  NaN NaN NaN 
    3  NaN NaN 5 
    4  NaN NaN 4 
    5  NaN 3  3 
    6  NaN 2 NaN 
    7  3  1 NaN 
    8  2 NaN NaN 
    9  1 NaN NaN 

我想在每列递增的最后一个可用值回填它,所以它看起来是这样的:

  A B C 
Timestamp 
    1  9 7 7 
    2  8 6 6 
    3  7 5 5 
    4  6 4 4 
    5  5 3 3 
    6  4 2 NaN 
    7  3 1 NaN 
    8  2 NaN NaN 
    9  1 NaN NaN 

回答

3

让我们试试这个:

df1 = df1[::-1].fillna(method='ffill') 
(df1 + (df1 == df1.shift()).cumsum()).sort_index() 

输出:

   A B C 
Timestamp    
1   9.0 7.0 7.0 
2   8.0 6.0 6.0 
3   7.0 5.0 5.0 
4   6.0 4.0 4.0 
5   5.0 3.0 3.0 
6   4.0 2.0 NaN 
7   3.0 1.0 NaN 
8   2.0 NaN NaN 
9   1.0 NaN NaN 
3

你可以试试这个:

def bfill_increment(col): 
    col_null = col.isnull()[::-1] 
    groups = col_null.diff().fillna(0).cumsum() 
    return col_null.groupby(groups).cumsum()[::-1] + col.bfill() 

df.apply(bfill_increment) 

enter image description here