Python: Pandas dataframe переупорядочивает строки на основе последних трех цифр Integer в столбце - PullRequest
0 голосов
/ 08 мая 2018

У меня есть следующий фрейм данных:

YearMonth   Total Cost
2015009     $11,209,041 
2015010     $20,581,043 
2015011     $37,079,415 
2015012     $36,831,335 
2016008     $57,428,630 
2016009     $66,754,405 
2016010     $45,021,707 
2016011     $34,783,970 
2016012     $66,215,044 

YearMonth - это столбец int64. Значение в YearMonth, например 2015009, обозначает сентябрь 2015 года. Я хочу изменить порядок строк, чтобы, если последние 3 цифры были одинаковыми, я хотел, чтобы строки отображались прямо друг над другом, отсортированные по году.

Ниже мой желаемый вывод:

YearMonth   Total Cost
2015009     $11,209,041 
2016009     $66,754,405     
2015010     $20,581,043 
2016010     $45,021,707    
2015011     $37,079,415 
2016011     $34,783,970   
2015012     $36,831,335 
2016012     $66,215,044
2016008     $57,428,630

Я искал Google, чтобы попытаться найти, как это сделать, но безрезультатно.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Один из способов донести ваш столбец int до строки и использовать доступ к строке с индексированием.

df.assign(sortkey=df.YearMonth.astype(str).str[-3:])\
  .sort_values('sortkey')\
  .drop('sortkey', axis=1)

Выход:

   YearMonth   Total Cost
4    2016008  $57,428,630
0    2015009  $11,209,041
5    2016009  $66,754,405
1    2015010  $20,581,043
6    2016010  $45,021,707
2    2015011  $37,079,415
7    2016011  $34,783,970
3    2015012  $36,831,335
8    2016012  $66,215,044
0 голосов
/ 08 мая 2018
df['YearMonth'] = pd.to_datetime(df['YearMonth'],format = '%Y0%m')
df['Year'] = df['YearMonth'].dt.year
df['Month'] = df['YearMonth'].dt.month
df.sort_values(['Month','Year'])

        YearMonth   Total   Year    Month
8   2016-08-01  $57,428,630 2016    8
0   2015-09-01  $11,209,041 2015    9
1   2016-09-01  $66,754,405 2016    9
2   2015-10-01  $20,581,043 2015    10
3   2016-10-01  $45,021,707 2016    10
4   2015-11-01  $37,079,415 2015    11
5   2016-11-01  $34,783,970 2016    11
6   2015-12-01  $36,831,335 2015    12
7   2016-12-01  $66,215,044 2016    12

Один из способов сделать. Может быть более быстрый путь с меньшим количеством шагов, которые не включают преобразование YearMonth в дату и время, но если у вас есть дата, имеет больше смысла использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...