Как отсортировать pandas фрейм данных по двум столбцам даты - PullRequest
6 голосов
/ 22 апреля 2020

У меня есть 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

Теперь я хочу отсортировать сначала столбец года, а затем столбец месяца, как показано ниже:

   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

Как сделать я делаю это?

Ответы [ 3 ]

5 голосов
/ 22 апреля 2020

Вы можете изменить столбец 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
5 голосов
/ 22 апреля 2020

IIU C давайте попробуем 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
1 голос
/ 22 апреля 2020
df=df.sort_values(by=["column_year", "column_Month"], ascending=[True, True])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...