How to solve a Keyerror in python for-loop that occurs when reaching the end of the loop

I am creating a new column in an existing df with the values of the previous column in the i+1 position. This means the last value of the new column will remain empty.

The code is working in the sense the new df is correctly created but it is giving Key Error. I udnerstand the loop is not detecting how to stop. Seems to have a pretty simple solution but I have not been able to fix it so far. This is the code.

data = [['scn1', 100, ''], ['scn1', 150, ''], ['scn1', 300, '']]    
OCS = pd.DataFrame(data, columns = ['scn', 'FROM', 'TO'])

for i in OCS.index:
        a = i
        i = i+1
        lastvld = OCS.loc[i].FROM  
        maxloop = len(OCS)
        if a <= maxloop:
            OCS.loc[a, 'TO'] = lastvld  

Any help will be very appretiated.

Answer

The problem is the line i = i+1. The for loop will update i with each value in the index, so you don’t need to do this at all. Incrementing i inside the loop is assigning a value that is not in your index.

I think what you’re trying to do is set the TO column to the FROM value in the next row, for all but the last row. Try this:

import pandas as pd

data = [['scn1', 100, ''], ['scn1', 150, ''], ['scn1', 300, '']]
OCS = pd.DataFrame(data, columns = ['scn', 'FROM', 'TO'])

maxloop = OCS.index.max()

for i in OCS.index:
    if i < maxloop:
        lastvld = OCS.loc[i+1].FROM
        OCS.loc[i, 'TO'] = lastvld

print(OCS)

Output:

    scn  FROM   TO
0  scn1   100  150
1  scn1   150  300
2  scn1   300