title: How to populate rows of pandas dataframe column based with previous row based on a multiple conditions?
body: <p>Disclaimer: This might be possible duplicate but I cannot find the exact solution. Please feel free to mark this question as duplicate and provide link to duplicate question in comments.</p>
  <p>I am still learning python dataframe operations and this possibly has a very simple solution which I am not able to figure out.</p>
  <p>I have a python dataframe with a single columns. Now I want to change value of each row to value of previous row if certain conditions are satisfied. I have created a loop solution to implement this but I was hoping for a more efficient solution.</p>
  <p>Creation of initial data:</p>
  <pre><code>import numpy as np
  import pandas as pd
  
  data = np.random.randint(5,30,size=20)
  df = pd.DataFrame(data, columns=['random_numbers'])
  
  print(df)
  
      random_numbers
  0                6
  1               24
  2               29
  3               18
  4               22
  5               17
  6               12
  7                7
  8                6
  9               27
  10              29
  11              13
  12              23
  13               6
  14              25
  15              24
  16              16
  17              15
  18              25
  19              19
  </code></pre>
  <p>Now lets assume two condition are 1) value less than 10 and 2) value more than 20. In any of these cases, set row value to previous row value. This has been implement in loop format as follows:</p>
  <pre><code>for index,row in df.iterrows():
      if index == 0:
          continue;
      if(row.random_numbers&lt;10):
          df.loc[index,'random_numbers']=df.loc[index-1,'random_numbers']
      if(row.random_numbers&gt;20):
          df.loc[index,'random_numbers']=df.loc[index-1,'random_numbers']
  
      random_numbers
  0                6
  1                6
  2                6
  3               18
  4               18
  5               17
  6               12
  7               12
  8               12
  9               12
  10              12
  11              13
  12              13
  13              13
  14              13
  15              13
  16              16
  17              15
  18              15
  19              19
  </code></pre>
  <p>Please suggest a more efficient way to implement this logic as I am using large number of rows.</p>