I need to sort a dataframe by one column, which includes a combination of numbers and letters.
df = [{"user": "seth",
"name": "1"},
{"user" : "chris",
"name": "10A"},
{"user" : "aaron",
"name": "4B"},
{"user" : "dan",
"name": "10B"}]
My code:
df1 = df.sort_values(by=['name'])
This gets me:
df1 = [{"user": "seth",
"name": "1"},
{"user" : "chris",
"name": "10A"},
{"user" : "dan",
"name": "10B"},
{"user" : "aaron",
"name": "4B"}]
I want:
df1 = [{"user": "seth",
"name": "1"},
{"user" : "aaron",
"name": "4B"},
{"user" : "chris",
"name": "10A"},
{"user" : "dan",
"name": "10B"}]
I had a different question that was flagged as a similar question, and their code:
df.reindex(index=natsorted(df.name))
It returns a sorted dataframe, but all values have been replaced by NaNs.
df.iloc(natsorted(df.name))
It raises an error:
TypeError: unhashable type: 'list'
To slightly correct Quang's comment, this works fine
import natsort
df1.iloc[natsort.index_humansorted(df1.name)]
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments