鉴于此DataFrame:
df = pd.DataFrame([['August', 2], ['July', 3], ['Sept', 6]], columns=['A', 'B'])
Run Code Online (Sandbox Code Playgroud)
我想按顺序对A列进行排序:7月,8月,9月.是否有某种方法可以使用类似"sort_values"的排序函数,但是按值预先定义排序顺序?
定义字典中的顺序并根据它排序
sort_dict = {'July':0,'August':1,'Sept':2}
df.iloc[df['A'].map(sort_dict).sort_values().index]
Run Code Online (Sandbox Code Playgroud)
输出
A B
1 July 3
0 August 2
2 Sept 6
Run Code Online (Sandbox Code Playgroud)
运用 Categorical
df.A=pd.Categorical(df.A,categories=['July', 'August', 'Sept'])
df=df.sort_values('A')
df
Out[310]:
A B
1 July 3
0 August 2
2 Sept 6
Run Code Online (Sandbox Code Playgroud)
小智 8
从pandas 1.1.0版本开始,sort_values支持按key排序。
df = df.sort_values('A', key=lambda s: s.apply(['July', 'August', 'Sept'].index), ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
您是否反对使用完整的月份名称或一致的缩写?
df = pd.DataFrame([['August', 2], ['July', 3], ['Sept', 6]], columns=['A', 'B'])
df
import calendar
df = df.replace({'Sept':'September'})
calendar.month_name[1:]
Run Code Online (Sandbox Code Playgroud)
输出:
['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
df['A'] = pd.Categorical(df.A, categories=calendar.month_name[1:], ordered=True)
df.sort_values('A')
Run Code Online (Sandbox Code Playgroud)
输出:
A B
1 July 3
0 August 2
2 September 6
Run Code Online (Sandbox Code Playgroud)
或者使用calendar.month_abbr
calendar.month_abbr[1:]
Run Code Online (Sandbox Code Playgroud)
输出:
['Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |