python pandas数据排序
0 背景
Pandas是一个广泛使用的Python库,专门用于数据处理和分析。之前我们介绍了相关的筛选、查询、操作。本篇我们主要介绍pandas
的数据排序。排序对于数据的可读性、分析以及最终的数据可视化都是关键步骤。
Pandas中的排序方法:
-
sort_values()
方法:这是Pandas中用于根据一个或多个列的值对数据进行排序的主要方法。 -
sort_index()
方法:该方法根据索引排序DataFrame。
1 使用
初始化数据
在WPS中初始化数据:
df = xl("$A$1:$G$18", headers=True, sheet_name="工作表1")
# 设置索引为uid列
df.set_index('uid',inplace=True)
print(df.head())
在python中初始化数据:
# 初始化数据
# df = pd.read_csv('./工作表1.csv')
data = {
"uid": [0, 3,2, 4, 5, 6, 7, 8, 9],
"uname": ["雷嘉伦", "杜睿", "孙晓明", "方宇宁", "彭睿", "苏詩涵", "宋子异", "彭震南", "钟宇宁"],
"usex": ["男", "男", "男", "男", "男", "女", "男", "男", "男"],
"uage": [79, 83, 19, 31, 18, 71, 47, 55, 59],
"umail": ["lj712@mail.com", "ruidu@hotmail.com", "xiaomsun@gmail.com", "", "pengrui910@icloud.com", None, "ziyso@gmail.com", "zhepeng404@gmail.com", "yuningzhong407@hotmail.com"],
"ucity": ["洛杉矶", "广州市", "纽约", "深圳", "纽约", "东莞", "中山", "阿克伦", "芝加哥"],
"udate": ["2001/11/13", "2002/5/7", "2010/8/9", "2018/12/17", "2017/4/3", "2021/1/20", "2001/6/18", "2016/2/17", "2014/3/15"]
}
df = pd.DataFrame(data)
df.set_index('uid', inplace=True)
sort_index()
按照索引降序
# 按照索引降序
df.sort_index(ascending=False)
按照列排序
# 按照列排序
df.sort_index(axis=1)
在原数据基础上排序, 不返回新的Dataframe
# 在原数据基础上排序, 不返回新的数据
df.sort_index(inplace=True)
索引重新0-(n-1)排,不使用原来的索引
# 索引重新0-(n-1)排,不使用原来的索引, 可以得到它的排序号
df.sort_index(ignore_index=True)
空值在排序中的位置
# na_position='first', 表示空值排在前面,另'last'表示空值在后(此处是指索引的空值), 默认是'last'
df['umail'].sort_index(na_position='first')
自定义函数排序
# 按照自定义函数排序
df.sort_index(key=lambda x:abs(x-5))
df1 = pd.DataFrame({"a": [1, 2, 3, 4]}, index=['A', 'b', 'C', 'd'])
df1.sort_index(key=lambda x: x.str.lower())
sort_values()
数据值的排序主要使用sort_values()
,数字按大小顺序,字符按字母顺序。Series和DataFrame都支持此方法。
按照单、多列排序
df.sort_values(by='usex')
df.sort_values(by=['usex', 'umail'], na_position='last', ascending=False)
# 按照usex降序, umail升序的形式排序
df.sort_values(by=['usex', 'umail'], ascending=[False, True])
修改立即在原Dataframe上生效
df.sort_values('usex',inplace=True)
索引重新0-(n-1)排
# 索引重新0-(n-1)排
df.sort_values('umail', ignore_index=True)
按照大小值排序
# 按值大小排序
df['uage'].nlargest(3)
df.nlargest(3, 'uage')
# 等同于
df.sort_values('uage', ascending=False).head(3)
df.nsmallest(3, ['uage', 'uid'])
2 关于
欢迎关注我的微信公众号
原文始发于微信公众号(其之):python pandas数据排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204797.html