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)
scn FROM TO 0 scn1 100 150 1 scn1 150 300 2 scn1 300