pandas通过递增最后一个值来回填NaN

时间:2017-06-15 20:56:13

标签: python pandas

我有一个数据框:

            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

2 个答案:

答案 0 :(得分:4)

我们试试这个:

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

答案 1 :(得分: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