pandas replace zeros with previous non zero value

后端 未结 2 520
Happy的楠姐
Happy的楠姐 2020-12-01 14:01

I have the following dataframe:

index = range(14)
data = [1, 0, 0, 2, 0, 4, 6, 8, 0, 0, 0, 0, 2, 1]
df = pd.DataFrame(data=data, index=index, columns = [\'A\         


        
相关标签:
2条回答
  • 2020-12-01 14:44

    This is a better answer to the previous one, since the previous answer returns a dataframe which hides all zero values.

    Instead, if you use the following line of code -

    df['A'].mask(df['A'] == 0).ffill(downcast='infer')
    

    Then this resolves the problem. It replaces all 0 values with previous values.

    0 讨论(0)
  • 2020-12-01 15:05

    You can use replace with method='ffill'

    In [87]: df['A'].replace(to_replace=0, method='ffill')
    Out[87]:
    0     1
    1     1
    2     1
    3     2
    4     2
    5     4
    6     6
    7     8
    8     8
    9     8
    10    8
    11    8
    12    2
    13    1
    Name: A, dtype: int64
    

    To get numpy array, work on values

    In [88]: df['A'].replace(to_replace=0, method='ffill').values
    Out[88]: array([1, 1, 1, 2, 2, 4, 6, 8, 8, 8, 8, 8, 2, 1], dtype=int64)
    
    0 讨论(0)
提交回复
热议问题