2

I can sort dataframe by column like this:

df.sort(columns='sort_index', inplace=True)

And I can sort array with ignoring prefixes like this:

array.sort(key=lambda element: re.sub(re, "", element))

But how to sort dataframe with ignoring prefixes?

Tony V.
  • 350
  • 1
  • 4
  • 21

1 Answers1

2

I think you need str.replace with argsort for indices and then select by iloc what reorder rows:

df = pd.DataFrame({
    'B': list(range(9)), 
}, index=['1s','2d','2a','1c','22d','1b','2b','1c','4d'])
print (df)
     B
1s   0
2d   1
2a   2
1c   3
22d  4
1b   5
2b   6
1c   7
4d   8

idx = df.index.str.replace('\D+', '').astype(int).argsort()
df = df.iloc[idx]
print (df)
     B
1s   0
1c   3
1b   5
1c   7
2d   1
2a   2
2b   6
4d   8
22d  4
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252