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.
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