如何按两个日期列对熊猫数据框进行排序

Nav*_*ala 6 python dataframe pandas

我有一个像这样的熊猫数据框:

   column_year  column_Month  a_integer_column
0   2014        April         25.326531
1   2014        August        25.544554
2   2015        December      25.678261
3   2014        February      24.801187
4   2014        July          24.990338
...  ...           ...           ...
68  2018        November      26.024931
69  2017        October       25.677333
70  2019        September     24.432361
71  2020        February      25.383648
72  2020        January       25.504831
Run Code Online (Sandbox Code Playgroud)

我现在想先对年份列进行排序,然后对月份列进行排序,如下所示:

   column_year  column_Month  a_integer_column
3   2014        February      24.801187
0   2014        April         25.326531
4   2014        July          24.990338
1   2014        August        25.544554
2   2015        December      25.678261
...  ...           ...            ...
69  2017        October       25.677333
68  2018        November      26.024931
70  2019        September     24.432361
72  2020        January       25.504831
71  2020        February      25.383648
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

WeN*_*Ben 6

让我们试试to_datetime+ argsort

df=df.iloc[pd.to_datetime(df.column_year.astype(str)+df.column_Month,format='%Y%B').argsort()]
   column_year column_Month  a_integer_column
3         2014     February         24.801187
0         2014        April         25.326531
4         2014         July         24.990338
1         2014       August         25.544554
2         2015     December         25.678261
Run Code Online (Sandbox Code Playgroud)


piR*_*red 6

您可以将column_Month列更改为CategoricalDtype

Months = pd.CategoricalDtype([
    'January', 'February', 'March', 'April', 'May', 'June',
    'July', 'August', 'September', 'October', 'November', 'December'
], ordered=True)

df.astype({'column_Month': Months}).sort_values(['column_year', 'column_Month'])

    column_year column_Month  a_integer_column
3          2014     February         24.801187
0          2014        April         25.326531
4          2014         July         24.990338
1          2014       August         25.544554
2          2015     December         25.678261
69         2017      October         25.677333
68         2018     November         26.024931
70         2019    September         24.432361
72         2020      January         25.504831
71         2020     February         25.383648
Run Code Online (Sandbox Code Playgroud)