2015-09-11 2 views
2

У меня есть кадр данных панд, которая выглядит как:как сортировать по убыванию алфавитно-цифровой индекс панды.

df = DataFrame({'id':['a132','a132','b5789','b5789','c1112','c1112'], 'value':[0,0,0,0,0,0,]}) 

df = df.groupby('id').sum() 

    value 
id   
a132  0 
b5789  0 
c1112  0 

Я хотел бы отсортировать его так, что он выглядит следующим образом:

 value 
id     
b5789  0 
c1112  0 
a132  0 

, который смотрит на номер (хотя строка) и сортировка а нисходящий

+0

http://stackoverflow.com/a/30575879/4080476 –

+0

, который требует от меня сделать карту пинг каждый раз. Это требует от меня взглянуть на имя. Мои реальные данные велики и меняются каждый раз. Кроме того, мне нужно установить автоматическую работу, которая выполняется каждый день. Спасибо за попытку. –

ответ

2

Простого решения заключается в следующем:

  • расколоть индекс для извлечения числа во временном ключевом столбце
  • сортировать по этим колонкам нисходящих
  • падению ключевого столбцу временной

df = DataFrame({'id':['a132','a132','b5789','b5789','c1112','c1112'], 'value':[0,0,0,0,0,0,]}) 

df = df.groupby('id').sum() 

df['key'] = df.index 
df['key'] = df['key'].str.split('(\d+)').str[1].astype(int) 
df = df.sort('key', ascending=False).drop('key', axis=1) 

# Result 
     value 
id   
b5789  0 
c1112  0 
a132  0 
2

Categoricals обеспечивают достаточно простой способ определения произвольного заказа

In [35]: df['id'] = df['id'].astype('category') 

In [39]: df['id'] = (df['id'].cat.reorder_categories(
         sorted(df['id'].cat.categories, key = lambda x: int(x[1:]), reverse=True))) 
In [40]: df.groupby('id').sum() 
Out[40]: 
     value 
id   
b5789  0 
c1112  0 
a132  0 
Смежные вопросы