name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 1822015-04-203 Cooper Schnauzer Gray 49172011-12-110 Bella Labrador Brown 56242013-07-011 Charlie Poodle Black 43242016-09-162 Lucy Chow Chow Brown 46242014-08-254 Max Labrador Black 59292017-01-206 Bernie St. Bernard White 77742018-02-27技术支持
name breed color height_cm weight_kg date_of_birth
6 Bernie St. Bernard White 77742018-02-274 Max Labrador Black 59292017-01-200 Bella Labrador Brown 56242013-07-011 Charlie Poodle Black 43242016-09-162 Lucy Chow Chow Brown 46242014-08-253 Cooper Schnauzer Gray 49172011-12-115 Stella Chihuahua Tan 1822015-04-20技术支持
name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 1822015-04-203 Cooper Schnauzer Gray 49172011-12-111 Charlie Poodle Black 43242016-09-162 Lucy Chow Chow Brown 46242014-08-250 Bella Labrador Brown 56242013-07-014 Max Labrador Black 59292017-01-206 Bernie St. Bernard White 77742018-02-27技术支持
name breed color height_cm weight_kg date_of_birth
5 Stella Chihuahua Tan 1822015-04-203 Cooper Schnauzer Gray 49172011-12-110 Bella Labrador Brown 56242013-07-012 Lucy Chow Chow Brown 46242014-08-251 Charlie Poodle Black 43242016-09-164 Max Labrador Black 59292017-01-206 Bernie St. Bernard White 77742018-02-27技术支持
# Sort rows by multiple levels of a multi-level index
dogs_sorted_multi = dogs.sort_index(level=[0,1], ascending=[True,False])print(dogs_sorted_multi)技术支持
# Sort homelessness by individuals
homelessness_ind = homelessness.sort_values("individuals")# Print the top few rowsprint(homelessness_ind.head())技术支持
运行上述代码后,将产生如下结果:
region state individuals family_members state_pop
50 Mountain Wyoming 434.0205.057760134 West North Central North Dakota 467.075.07580807 South Atlantic Delaware 708.0374.096547939 New England Rhode Island 747.0354.0105828745 New England Vermont 780.0511.0624358技术支持
在 DataFrame 中发现有趣的数据点,往往可以先调整行的顺序。如果将列名传递给
.sort_values(),就能按该列对行进行排序。当多行具有相同的值时(在对分类变量排序时很常见),您可能希望通过另一列来“打破平局”。此时可以传递列名列表,按多列进行排序。
使用 sort_values() 按列值排序行
通过排序改变行的顺序,可以把最重要或最有意思的数据放到 DataFrame 顶部。
按单列排序
例如,对 dogs DataFrame 的
weight_kg列应用sort_values(),结果是最轻的狗排在顶部(吉娃娃 Stella),最重的狗在底部(圣伯纳犬 Bernie)。将
ascending参数设为 False 会反向排序,从最重到最轻。按多列排序
通过将列名列表传给
sort_values,可以按多个变量排序。下面先按体重,再按身高排序。这样,尽管 Charlie、Lucy 和 Bella 体重相同,但它们会按从矮到高的顺序排列。如需分别指定每个变量的排序方向,可向 ascending 参数传入列表。现在 Charlie、Lucy 和 Bella 会按从高到矮的顺序排列。
使用 sort_index() 按行索引排序
有时,您可能希望基于行标签(即 DataFrame 的索引)而不是特定列来重新排序行。这种情况下,可以使用
sort_index()方法替代sort_values()。请注意,默认情况下,sort_index()会按索引对行进行升序排序:如果需要按降序排序行,只需传入
ascending=False:类似地,如果有多级(分层)索引,
sort_index()也可以通过对多个层级排序来处理。您只需向level或ascending参数传入列表(就像前面对sort_values()传入列表一样):Pandas 排序值交互示例
在以下示例中,您将按无家可归个体人数从小到大排序
homelessness,并将结果保存为homelessness_ind。最后,打印该排序后 DataFrame 的前几行。运行上述代码后,将产生如下结果:
亲自试一试。
想进一步了解排序与子集选择,请观看我们课程 Data Manipulation with pandas 中的这段视频。
本文内容摘自 DataCamp 的 Data Manipulation with pandas 课程,作者为 Maggie Matsui 和 Richie Cotton。
延伸学习
本文讲解了何时使用
sort_index()与sort_values():当您希望基于列值重新排序行时,使用sort_values();当您希望基于行标签(DataFrame 的索引)重新排序行时,使用sort_index()。我们还有许多实用的 pandas 教程,助您持续学习,例如 Pandas 初学者终极指南,方便您不断练习。我们也提供针对常见问题的操作指南,包括 如何将 CSV 数据导入 Pandas 和 如何在 Pandas 中连接 DataFrame。此外,别忘了学习我们的 Python 编程技能路径,不断提升您的能力。