'Sort pandas column with month year string

I have a pandas index column with values as month_year. Example 'March_2021', 'April 2020', 'December_2021'. I would like to sort the index in an intelligent manner that sorts the index in the right order as: 'April 2020', 'March_2021', 'December_2021' without having the correct order in a list as I have below.

My current implementation:

month_year_sorter = ['April 2020','March_2021', 'December_2021']
df = df.reindex(month_year_sorter)


Solution 1:[1]

Observation: "April 2020" does work with pandas.to_datetime whilst "March_2021" does not

import pandas as pd
a2020 = pd.to_datetime("April 2020")
print(a2020.month)  # 4
print(a2020.year)  # 2020
m2021 = pd.to_datetime("March_2021")  # ValueError: ('Unknown string format:', 'March_2021')

Possible exploit: convert your strings into format which pandas.to_datetime can consume and use that for sorting that, for example

import pandas as pd
def convert_to_timestamp(x):
    return pd.to_datetime(x.replace('_',' '))
month_year_unsorted = ['December_2021','April 2020','March_2021']
month_year_sorted = sorted(month_year_unsorted,key=convert_to_timestamp)
print(month_year_sorted)  # ['April 2020', 'March_2021', 'December_2021']

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Daweo