Krz*_*ski 3 python natural-sort dataframe pandas
我想对 pandas 中的列应用自然排序顺序DataFrame。我要排序的列可能包含重复项。我已经看到了相关的自然排序 Pandas DataFrame
问题,但是它是关于对索引进行排序,而不是任何列。
例子
df = pd.DataFrame({'a': ['a22', 'a20', 'a1', 'a10', 'a3', 'a1', 'a11'], 'b': ['b5', 'b2', 'b11', 'b22', 'b4', 'b1', 'b12']})
a b
0 a22 b5
1 a20 b2
2 a1 b11
3 a10 b22
4 a3 b4
5 a1 b1
6 a11 b12
Run Code Online (Sandbox Code Playgroud)
自然排序列a:
a b
0 a1 b11
1 a1 b1
2 a3 b4
3 a10 b22
4 a11 b12
5 a20 b2
6 a22 b5
Run Code Online (Sandbox Code Playgroud)
自然排序列b:
a b
0 a1 b1
1 a20 b2
2 a3 b4
3 a22 b5
4 a1 b11
5 a11 b12
6 a10 b22
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 14
您可以将值转换为具有排序类别的有序分类natsorted,然后使用sort_values:
import natsort as ns
df['a'] = pd.Categorical(df['a'], ordered=True, categories= ns.natsorted(df['a'].unique()))
df = df.sort_values('a')
print (df)
a b
5 a1 b1
2 a1 b11
4 a3 b4
3 a10 b22
6 a11 b12
1 a20 b2
0 a22 b5
Run Code Online (Sandbox Code Playgroud)
df['b'] = pd.Categorical(df['b'], ordered=True, categories= ns.natsorted(df['b'].unique()))
df = df.sort_values('b')
print (df)
a b
5 a1 b1
1 a20 b2
4 a3 b4
0 a22 b5
2 a1 b11
6 a11 b12
3 a10 b22
Run Code Online (Sandbox Code Playgroud)