Satyam Anand
Satyam Anand

Reputation: 489

Sort date in list of strings in pandas column

I have data in this format

['96.22872386(2015-03-28)', 'None(2014-03-31)', '96.22872386(2015-03-30)', 'None(2017-03-31)']

['None(2015-10-01)', '1400(2021-11-23)', '1281(2019-07-26)', '690.854(2016-12-13)', '530(2021-08-21)']

Expected result:

['None(2014-03-31)', '96.22872386(2015-03-28)', '96.22872386(2015-03-30)', 'None(2017-03-31)']

['None(2015-10-01)', '690.854(2016-12-13)', '1281(2019-07-26)', '530(2021-08-21)', '1400(2021-11-23)']

Basically I want to sort the column values with respect to date.

Upvotes: 1

Views: 318

Answers (2)

jezrael
jezrael

Reputation: 862511

If data are per rows use sorted with converting values to datetimes:

print (df)
                                                 col
0  ['96.22872386(2015-03-28)', 'None(2014-03-31)'...
1  ['None(2015-10-01)', '1400(2021-11-23)', '1281...

#if need convert values to lists
#import ast
#df['col'] = df['col'].apply(ast.literal_eval)

f = lambda x: sorted(x, key=lambda y: pd.to_datetime(y.split('(')[-1].strip(')')))
df['col'] = df['col'].apply(f)
print (df)
                                                 col
0  [None(2014-03-31), 96.22872386(2015-03-28), 96...
1  [None(2015-10-01), 690.854(2016-12-13), 1281(2...

Upvotes: 2

John Giorgio
John Giorgio

Reputation: 659

import pandas as pd

df = pd.DataFrame(['96.22872386(2015-03-28)', 'None(2014-03-31)', '96.22872386(2015-03-30)', 'None(2017-03-31)'], columns=['col'])

def sort_by_date(df):
    df['date'] = df['col'].str.extract("(\(.*\))", expand=True)
    df = df.sort_values(by='date').drop(columns=['date'])
    return df

sorted_df = sort_by_date(df)

Upvotes: 0

Related Questions