Press "Enter" to skip to content

Six Ways to Reverse Pandas dataframe

In this post we will learn how to reverse Pandas dataframe. We start by changing the first column with the last column and continue with reversing the order completely. After we have learned how to swap columns in the dataframe and reverse the order by the columns, we continue by reversing the order of the rows. That is, pandas dataframe can be reversed such that the last column becomes the first or such that the last row becomes the first.

Data to Work With

First, we create some example data using normal and binomial from numpy.random.  Using normal we create two different response time variables (response times are often used in experimental psychology) and binomial is used to create response accuracy (also often used in psychology experiments).

How to Create a Pandas dataframe

We will use Pandas to create a dataframe from the data. Note, the simulation of data is not intended to be used for anything else than for us to have data to create a Pandas dataframe.

import pandas as pd
import numpy as np

distracted = [1 for i in xrange(15)]
normal_perf = [0 for i in xrange(15)]

sex = ['Male' if i%2 == 0 else 'Female' for i in xrange(30)]

rt_distracted = np.random.normal(1660, 100, 15)
rt_normal_perf = np.random.normal(1054, 97, 15)

accuracy_distracted = np.random.binomial(1, .79, 15)
accuracy_normal_perf = np.random.binomial(1, .87, 15)


rt = np.concatenate((rt_distracted, rt_normal_perf))
acc = np.concatenate((accuracy_distracted, accuracy_normal_perf))
distracted.extend(normal_perf)

subject_id = [i for i in xrange(1,31)]

data = {'Sub_id':subject_id, 'Condition':distracted, 'RT':rt, 
         'Accuracy':acc, 'Gender':sex}
         
data_frame = pd.DataFrame(data)
Pandas Dataframe Object
Output of data_frame.head()

Learn how to work with Pandas dataframe (e.g., read csv & excel,  subset, and group) here.

Reversing Pandas Dataframe by Column

In this section, we will learn how to reverse Pandas dataframe by column.
First, we are going to start with changing places of the first (“Accuracy) and last column (“Sub_id”).
In the example below, we create a list of the column names and swap the first item in the list to the last in the list.

How to Swap Columns in a dataframe

columns = data_frame.columns.tolist()
columns = columns[-1:] + columns[:-1]

Then we continue with using the created list and the columns in the dataframe will change places. That is, we reverse the data frame by column. Pretty easy:

data_frame = data_frame[columns]
data_frame.head()
First and last column have changed places

How to Order a Pandas Dataframe alphabetically

We can sort our dataframe ascending again (i.e., alphabetical):

data_frame = data_frame.sort_index(axis=1 ,ascending=True)
data_frame.head()

How to Reverse the Order of the Columns

In this section we will learn how to reverse the order of the columns in the dataframe. That is, we can also reverse pandas dataframe completely. In the code example below, the second line (columns[::-1]) reverse the list of column names. Third, the dataframe is reversed using that list.

columns = data_frame.columns.tolist()
columns = columns[::-1]
data_frame = data_frame[columns]

How to Reverse a Single Column

In this Pandas reverse dataframe example we are going to reverse only one of the columns.

data_frame["Sub_id"] = data_frame["Sub_id"].values[::-1]
data_frame.head()

Reverse Pandas Dataframe by Row

Pandas dataframe object can also be reversed by row. That is, we can get the last row to become the first.  We start by re-orderíng the dataframe ascending. Note in the example below we use the axis argument and set it to “1”. This will make Pandas sort over the rows instead of the columns.

data_frame = data_frame.sort_index(axis=1 ,ascending=True)

First, we will use iloc which is integer based to reverse the order of the Pandas dataframe:

data_frame = data_frame.iloc[::-1]

However, we can also use sort_index by using the axis 0 (row). The code below will, of course, reverse the dataframe back to the one we started with.

data_frame = data_frame.sort_index(ascending=True, axis=0)

Lastly, we can also use the method reindex to reverse by row. This will sort Pandas Dataframe reversed. That is, the last element will be first.

data_frame = data_frame.reindex(index=data_frame.index[::-1])
data_frame.head()

That was it; six ways to reverse Pandas Dataframe. You can go to my GitHub-page to get a Jupyter notebook with all the above code and some output: Jupyter notebook.

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: