运行此代码:
df = pd.DataFrame(['ADc','Abc','AEc'],columns = ['Test'],index=[0,1,2])
df.sort(columns=['Test'],axis=0, ascending=False,inplace=True)
Run Code Online (Sandbox Code Playgroud)
返回有序的数据帧列:[Abc, AEc, ADc].ADc应该在AEc之前,发生了什么?
我不认为这是一个熊猫的错误.它似乎只是python排序算法使用混合套装字母的方式(区分大小写) - 看这里
因为当你这样做时:
In [1]: l1 = ['ADc','Abc','AEc']
In [2]: l1.sort(reverse=True)
In [3]: l1
Out[3]: ['Abc', 'AEc', 'ADc']
Run Code Online (Sandbox Code Playgroud)
因此,由于显然无法使用pandas排序方法控制排序算法,因此只需使用该列的较低版本的版本进行排序,然后将其删除:
In [4]: df = pd.DataFrame(['ADc','Abc','AEc'],columns = ['Test'],index=[0,1,2])
In [5]: df['test'] = df['Test'].str.lower()
In [6]: df.sort(columns=['test'], axis=0, ascending=True, inplace=True)
In [7]: df.drop('test', axis=1, inplace=True)
In [8]: df
Out[8]:
Test
1 Abc
0 ADc
2 AEc
Run Code Online (Sandbox Code Playgroud)
注意:如果希望按字母顺序排序列,则ascending必须将参数设置为True
编辑:
正如DSM建议的那样,为避免创建新的帮助列,您可以执行以下操作:
df = df.loc[df["Test"].str.lower().order().index]
Run Code Online (Sandbox Code Playgroud)
更新:
正如weatherfrog所指出的,对于新版本的熊猫,正确的方法是.sort_values().所以上面的单行成为:
df = df.loc[df["Test"].str.lower().sort_values().index]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |