Swapping rows within the same pandas dataframe
Use a temporary varaible to store the value using .copy()
, because you are changing the values while assigning them on chain i.e. Unless you use copy the data will be changed directly.
a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
b, c = a.iloc[0], a.iloc[1]
temp = a.iloc[0].copy()
a.iloc[0] = c
a.iloc[1] = temp
Or you can directly use copy like
a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
b, c = a.iloc[0].copy(), a.iloc[1].copy()
a.iloc[0],a.iloc[1] = c,b
In this way, it can be extrapolated to more complex situations:
a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
rows = a.index.to_list()
# Move the last row to the first index
rows = rows[-1:]+rows[:-1]
a=a.loc[rows]
The accepted answer does not make changes the index name.
If you only want to alter the order of rows you should use dataframe.reindex(arraylike)
. Notice that the index has changed.