Python 对索引为字符串的数据帧进行排序+;数字

Python 对索引为字符串的数据帧进行排序+;数字,python,pandas,string,sorting,digits,Python,Pandas,String,Sorting,Digits,我有以下数据帧: import numpy as np col1=['A_100','A_30','A_60','B_100','B_30','B_60'] vals=np.random.randint(0,20,size=6).tolist() df=pd.DataFrame(list(zip(col1,vals)),columns=['index','vals']).set_index('index') >>> vals index A_100

我有以下数据帧:

import numpy as np
col1=['A_100','A_30','A_60','B_100','B_30','B_60']
vals=np.random.randint(0,20,size=6).tolist()
df=pd.DataFrame(list(zip(col1,vals)),columns=['index','vals']).set_index('index')

>>>

       vals
index   
A_100   5
A_30    0
A_60    5
B_100   9
B_30    1
B_60    9
我想对数据帧进行排序,以便它将根据字符串的字母进行组织,然后根据数值进行组织,如下所示:

          val
index
A_100     5
A_60      0
A_30      5
B_100     9
B_60      1
B_30      9
我已尝试使用排序索引:

df.sort_index()
但返回的数据帧相同。
我还尝试通过重置索引和排序值来实现这一点,但得到了相同的结果:

df=df.reset_index()
df.sort_values('index')
>>>#nothin changed

df['indexNumber'] = df.index.str.rsplit('_').str[-1].astype(int)
df = df.sort_values(['indexNumber']).drop('indexNumber', axis=1)
>>>#new dataframe but now I have it A,B,A,B and I still need the A to be together and then the B
      vals
index   
A_30    5
B_30    0
A_60    5
B_60    9
A_100   1
B_100   9

我假设原因是,当它对值进行排序时,它在第一个数字上查找,然后6大于3,大于1,因此它认为已经“排序”,并且它不读取数字100


有没有简单的方法让它按字符串(a-b-c顺序)然后按数值顺序排序?(100,60,30)。Onne的想法是将
索引
转换为
系列
,使用到
数据帧
,将第二列转换为整数并对两列进行排序,该索引用于原始
df中的变更顺序。索引

df1 = df.index.to_series().str.split('_',expand=True)
df1[1] = df1[1].astype(int)
df1 = df1.sort_values([0, 1], ascending=[True, False])
print (df1)
       0    1
index        
A_100  A  100
A_60   A   60
A_30   A   30
B_100  B  100
B_60   B   60
B_30   B   30

df = df.reindex(df1.index)
print (df)
       vals
index      
A_100     0
A_60     12
A_30     13
B_100    12
B_60      6
B_30      6