You can use set order or rearrange columns of pandas DataFrame using either loc[]
, iloc[]
, and reindex()
methods. In this article, I will explain how to set the re-arrange the columns in a user-specific way with several examples.
Key Points –
- You can reorder columns by directly specifying the desired order in a list and assigning it back to the DataFrame.
- The
.loc[]
accessor allows you to reorder columns by specifying the column names in the desired order. - With
.iloc[]
, you can reorder columns by specifying their index positions, rather than their names. - The
reindex()
method allows reordering columns by passing a list of column names in the desired order, providing flexibility when working with existing DataFrames. - You can set the axis parameter to
axis=1
to reorder columns when using thereindex()
function. - If a column specified in
reindex()
does not exist in the DataFrame, it will create a new column with missing values (NaN) by default.
Quick Examples of Set Order of Columns in DataFrame
If you are in a hurry, below are some quick examples of how to set the order of DataFrame columns.
# Quick examples of set order of columns in DataFrame
# Set the columns in a order
# You want in a list and assign it to DF
df = df[['Courses','Fee','Discount','Duration']]
# Using DataFrame.loc[]
# To set column order
df2 = df.loc[:, ['Fee','Discount','Duration','Courses']]
# Using DataFrame.iloc[]
# to set column order by index
df2 = df.iloc[:, [1,2,0,3]]
# Using DataFrame.reindex()
# To set columns order
columnsTitles = ['Courses','Discount','Fee','Duration']
df2 = df.reindex(columns=columnsTitles)
# Using DataFrame.reindex()
df2 = df.reindex(['Courses','Discount','Fee','Duration'], axis=1)
# Set columns order using index
index = [0,2,1,3]
df2 = df[[df.columns[i] for i in index]]
Now, let’s create a DataFrame with a few rows and columns, execute these examples and validate results. Our DataFrame contains column names Courses
, Fee
, Duration
, and Discount
.
# Create DataFrame
import pandas as pd
technologies = {
'Courses':["Spark","PySpark","Python","pandas"],
'Fee' :[20000,25000,22000,30000],
'Duration':['30days','40days','35days','50days'],
'Discount':[1000,2300,1200,2000]
}
df = pd.DataFrame(technologies)
print(df)
Yields below output.
# Output:
Courses Fee Duration Discount
0 Spark 20000 30days 1000
1 PySpark 25000 40days 2300
2 Python 22000 35days 1200
3 pandas 30000 50days 2000
Set Order Columns in DataFrame Using []
You can set the order of the DataFrame columns in any way you want by specifying the columns in a list to df[]
, for example df[['Courses','Fee','Discount','Duration']]
.
# Rearrange the columns in custom order
df = df[['Courses','Fee','Discount','Duration']]
print(df.head())
# Change column Order Using []
df2 = df[['Courses','Fee','Discount','Duration']]
print(df2)
Yields below output.
# Output:
Courses Fee Discount Duration
0 Spark 20000 1000 30days
1 PySpark 25000 2300 40days
2 Python 22000 1200 35days
3 pandas 30000 2000 50days
Set Order Columns Using DataFrame.loc[]
You can use df.loc[:, ['Fee','Discount','Duration','Courses']]
to set order of columns in pandas DataFrame. You need to assign this back to DataFrame to reflect the order.
# Using DataFrame.loc[] to set column order
df2 = df.loc[:, ['Fee','Discount','Duration','Courses']]
print(df2)
Yields below output.
# Output:
Fee Discount Duration Courses
0 20000 1000 30days Spark
1 25000 2300 40days PySpark
2 22000 1200 35days Python
3 30000 2000 50days pandas
Rearrange Columns Using DataFrame.iloc[] with Index
You can also use DataFrame.iloc[]
the indexing syntax [:,[1,2,0,3]]
to re-arrange columns by Index in pandas DataFrame. If you are new to pandas refer Difference Between loc[] vs iloc[] to know more about using loc[]
and iloc[]
.
# Using DataFrame.iloc[] to set column order
df2 = df.iloc[:, [1,2,0,3]]
print(df2)
Yields below output.
# Output:
Fee Duration Courses Discount
0 20000 30days Spark 1000
1 25000 40days PySpark 2300
2 22000 35days Python 1200
3 30000 50days pandas 2000
Rearrange Columns Using DataFrame.reindex()
Use df.reindex(columns=columnsTitles)
with a list of columns in the desired order as columnsTitles
to set the columns.
# Using DataFrame.reindex() to set columns order
columnsTitles = ['Courses','Discount','Fee','Duration']
df2 = df.reindex(columns=columnsTitles)
print(df2)
# Using DataFrame.reindex()
df2 = df.reindex(['Courses','Discount','Fee','Duration'], axis=1)
print(df2)
Yields below output.
# Output:
Courses Discount Fee Duration
0 Spark 1000 20000 30days
1 PySpark 2300 25000 40days
2 Python 1200 22000 35days
3 pandas 2000 30000 50days
Set Order Columns Using Index
You can also use df[[df.columns[i] for i in index]]
to set order columns in DataFrame.
# set columns order using index
index = [0,2,1,3]
df2 = df[[df.columns[i] for i in index]]
print(df2)
Yields below output.
# Output:
Courses Duration Fee Discount
0 Spark 30days 20000 1000
1 PySpark 40days 25000 2300
2 Python 35days 22000 1200
3 pandas 50days 30000 2000
Complete Example to DataFrame Columns in Custom Order
import pandas as pd
technologies = {
'Courses':["Spark","PySpark","Python","pandas"],
'Fee' :[20000,25000,22000,30000],
'Duration':['30days','40days','35days','50days'],
'Discount':[1000,2300,1200,2000]
}
df = pd.DataFrame(technologies)
print(df)
# Now 'Duration' will appear at the end of our DataFrame
df = df[['Courses','Fee','Discount','Duration']]
print(df.head())
# Change column Order Using []
df2 = df[['Courses','Fee','Discount','Duration']]
print(df2)
# Using DataFrame.loc[] to set column order
df2 = df.loc[:, ['Fee','Discount','Duration','Courses']]
print(df2)
# Using DataFrame.iloc[] to set column order
df2 = df.iloc[:, [1,2,0,3]]
print(df2)
# Using DataFrame.reindex() to set columns order
columnsTitles = ['Courses','Discount','Fee','Duration']
df2 = df.reindex(columns=columnsTitles)
print(df2)
# Using DataFrame.reindex()
df2 = df.reindex(['Courses','Discount','Fee','Duration'], axis=1)
print(df2)
# Set columns order using index
index = [0,2,1,3]
df2 = df[[df.columns[i] for i in index]]
print(df2)
FAQ on Pandas Set Order of Columns in DataFrame
To reorder the columns in a DataFrame, you can simply pass a list of column names in the desired order to the DataFrame’s loc
or reindex
method.
You can reorder the columns in a Pandas DataFrame based on their names alphabetically. You can do this by using the sorted()
function to sort the column names and then applying that order to the DataFrame.
To move a single column to the first position in a Pandas DataFrame, you can reorder the columns by placing the target column at the front and keeping the other columns in their original order.
You can use custom sorting logic with the sorted()
function and a lambda or custom sorting function. For example, reorder columns based on the length of their names
The reindex()
method can be used to reorder columns by providing a list of column names in the desired order.
Conclusion
In this article, you have learned how to set the order of columns in pandas DataFrame using DataFrame.loc[]
, DataFrame.iloc[]
and DataFrame.reindex()
methods with examples. Use these you can re-arrange the columns you want when you have a few columns and these approaches are not much feasible if you have hundreds of columns and would like to re-arrange.
Happy Learning !!
Related Articles
- How to Change Position of a Column in Pandas
- Change the Order of Pandas DataFrame Columns
- Sort Pandas DataFrame by Date (Datetime)
- Combine Two Series into pandas DataFrame
- Pandas Write DataFrame to CSV File
- Pandas DataFrame reindex() Function
- Pandas Create Empty DataFrame
- Pandas Sum DataFrame Rows With Examples
- Pandas Get Row Number of DataFrame
- Pandas Group Rows into List Using groupby()