pandas.DataFrame.sort_values#
- DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)[源代码]#
按任一轴上的值排序。
- 参数
- by字符串或字符串列表
要排序的姓名或姓名列表。
如果 axis 是0还是 'index' 然后 by 可以包含索引级别和/或列标签。
如果 axis 为1或 'columns' 然后 by 可以包含列级别和/或索引标签。
- axis{0或‘index’,1或‘Columns’},默认为0
要排序的轴。
- ascending布尔值或布尔值列表,默认为True
升序和降序排序。为多个排序顺序指定列表。如果这是一个bool列表,则必须与by的长度匹配。
- inplace布尔值,默认为False
如果为True,则就地执行操作。
- kind{‘快速排序’,‘合并排序’,‘堆排序’,‘稳定’},默认‘快速排序’
排序算法的选择。另请参阅
numpy.sort()
了解更多信息。 mergesort 和 stable 是唯一稳定的算法。对于DataFrames,此选项仅在对单个列或标签进行排序时应用。- na_position{‘First’,‘Last’},默认为‘Last’
在以下情况下将NAS放在开头 first ; last 把Nans放在末尾。
- ignore_index布尔值,默认为False
如果为True,则生成的轴将标记为0,1,…,n-1。
1.0.0 新版功能.
- key可调用,可选
对排序前的值应用KEY函数。这类似于 key 建筑中的参数
sorted()
函数,但显著不同的是,这 key 函数应为 矢量化 。它应该期待一个Series
并返回与输入形状相同的Series。它将应用于中的每列 by 独立的。1.1.0 新版功能.
- 退货
- DataFrame或无
具有排序值的DataFrame或None,如果
inplace=True
。
参见
DataFrame.sort_index
按索引对DataFrame进行排序。
Series.sort_values
类似的方法适用于级数。
示例
>>> df = pd.DataFrame({ ... 'col1': ['A', 'A', 'B', np.nan, 'D', 'C'], ... 'col2': [2, 1, 9, 8, 7, 4], ... 'col3': [0, 1, 9, 4, 2, 3], ... 'col4': ['a', 'B', 'c', 'D', 'e', 'F'] ... }) >>> df col1 col2 col3 col4 0 A 2 0 a 1 A 1 1 B 2 B 9 9 c 3 NaN 8 4 D 4 D 7 2 e 5 C 4 3 F
按第1列排序
>>> df.sort_values(by=['col1']) col1 col2 col3 col4 0 A 2 0 a 1 A 1 1 B 2 B 9 9 c 5 C 4 3 F 4 D 7 2 e 3 NaN 8 4 D
按多列排序
>>> df.sort_values(by=['col1', 'col2']) col1 col2 col3 col4 1 A 1 1 B 0 A 2 0 a 2 B 9 9 c 5 C 4 3 F 4 D 7 2 e 3 NaN 8 4 D
排序降序
>>> df.sort_values(by='col1', ascending=False) col1 col2 col3 col4 4 D 7 2 e 5 C 4 3 F 2 B 9 9 c 0 A 2 0 a 1 A 1 1 B 3 NaN 8 4 D
将NAS放在首位
>>> df.sort_values(by='col1', ascending=False, na_position='first') col1 col2 col3 col4 3 NaN 8 4 D 4 D 7 2 e 5 C 4 3 F 2 B 9 9 c 0 A 2 0 a 1 A 1 1 B
使用键函数进行排序
>>> df.sort_values(by='col4', key=lambda col: col.str.lower()) col1 col2 col3 col4 0 A 2 0 a 1 A 1 1 B 2 B 9 9 c 3 NaN 8 4 D 4 D 7 2 e 5 C 4 3 F
带有键参数的自然排序,使用 natsort <https://github.com/SethMMorton/natsort> 包裹。
>>> df = pd.DataFrame({ ... "time": ['0hr', '128hr', '72hr', '48hr', '96hr'], ... "value": [10, 20, 30, 40, 50] ... }) >>> df time value 0 0hr 10 1 128hr 20 2 72hr 30 3 48hr 40 4 96hr 50 >>> from natsort import index_natsorted >>> df.sort_values( ... by="time", ... key=lambda x: np.argsort(index_natsorted(df["time"])) ... ) time value 0 0hr 10 3 48hr 40 2 72hr 30 4 96hr 50 1 128hr 20