排序分为降序和升序,dataframe排序包含单列排序和多列排序
# /usr/bin/python# -- coding: utf-8 --
# 导入依赖包pandas
import pandas as pd
# 读入数据
dat = pdread_csv('datatxt', 'r')
# 单列排序
# 使用sort,默认是升序,所以下面的两个方法等价
datsort(["column1"])
datsort(["column1"], ascending=True)
# 单列降序
datsort(["column1"], ascending=False)
# 多列升序
datsort(["column1", "column2"])
datsort(["column1", "column2"], ascending=True)
# 多列降序
datsort(["column1", "column2"], ascending=False)
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。
sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效
sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序
Example1:
>>>sorted([1,5,3,2,9])
[1,2,3,5,9]
>>>a=[5,3,2,1,4]
>>>asort()
>>>a
[1,2,3,4,5] #若用listsort()则list本身将被修改
>>>sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1,2,3,4,5] #sorted()对所有的可迭代序列都有效
在python24开始,listsort()和sorted()增加key参数来指定一个函数,此函数在每个元素比较前被调用。
Example2:
>>>sorted("This is a test string from Andrew"split(), key=strlower) #加了key,忽略大小写
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This'] #key=len按照长度进行排序
>>>sorted("This is a test string from Andrew"split()) #未加key,默认大写在前,小写在后
['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
更多的情况是用复杂对象的某些值来对复杂对象进行排序。
看代码:
# -- encoding: gbk --def print_list(_list):
for l in _list:
print l
students = [
[80, 90, 100],
[70, 100, 90],
[60, 60, 60],
[100, 100, 100],
[90, 90, 90]
]
print_list(students)
print '\n按第一列排序:'
sorted_by_first = sorted(students, key = lambda x : x[0])
print_list (sorted_by_first)
print '\n先按第二列排序,然后按第一列排序:'
sorted_by_second_then_first = sorted(students, key = lambda x : (x[1], x[0]))
print_list (sorted_by_second_then_first)
print '\n按总和排序,并按降序排序:'
sorted_by_sum = sorted(students, key = lambda x : sum(x), reverse = True)
print_list (sorted_by_sum)
运行:
很多时候,我们需要对List进行排序,Python提供了两个方法,对给定的List
L进行排序:
方法1用List的成员函数sort进行排序
方法2用built-in函数sorted进行排序(从24开始)
这两种方法使用起来差不多,以第一种为例进行讲解:
从Python24开始,sort方法有了三个可选的参数,Python
Library
Reference里是这样描述的
复制代码代码如下:
cmp:cmp
specifies
a
custom
comparison
function
of
two
arguments
(iterable
elements)
which
should
return
a
negative,
zero
or
positive
number
depending
on
whether
the
first
argument
is
considered
smaller
than,
equal
to,
or
larger
than
the
second
argument:
"cmp=lambda
x,y:
cmp(xlower(),
ylower())"
key:key
specifies
a
function
of
one
argument
that
is
used
to
extract
a
comparison
key
from
each
list
element:
"key=strlower"
reverse:reverse
is
a
boolean
value
If
set
to
True,
then
the
list
elements
are
sorted
as
if
each
comparison
were
reversedIn
general,
the
key
and
reverse
conversion
processes
are
much
faster
than
specifying
an
equivalent
cmp
function
This
is
because
cmp
is
called
multiple
times
for
each
list
element
while
key
and
reverse
touch
each
element
only
once
以下是sort的具体实例。
实例1:
复制代码代码如下:
>>>L
=
[2,3,1,4]
>>>Lsort()
>>>L
>>>[1,2,3,4]
实例2:
复制代码代码如下:
>>>L
=
[2,3,1,4]
>>>Lsort(reverse=True)
>>>L
>>>[4,3,2,1]
实例3:
复制代码代码如下:
>>>L
=
[('b',2),('a',1),('c',3),('d',4)]
>>>Lsort(cmp=lambda
x,y:cmp(x[1],y[1]))
>>>L
>>>[('a',
1),
('b',
2),
('c',
3),
('d',
4)]
实例4:
复制代码代码如下:
>>>L
=
[('b',2),('a',1),('c',3),('d',4)]
>>>Lsort(key=lambda
x:x[1])
>>>L
>>>[('a',
1),
('b',
2),
('c',
3),
('d',
4)]
实例5:
复制代码代码如下:
>>>L
=
[('b',2),('a',1),('c',3),('d',4)]
>>>import
operator
>>>Lsort(key=operatoritemgetter(1))
>>>L
>>>[('a',
1),
('b',
2),
('c',
3),
('d',
4)]
实例6:(DSU方法:Decorate-Sort-Undercorate)
复制代码代码如下:
>>>L
=
[('b',2),('a',1),('c',3),('d',4)]
>>>A
=
[(x[1],i,x)
for
i,x
in
enumerate(L)]
#i
can
confirm
the
stable
sort
>>>Asort()
>>>L
=
[s[2]
for
s
in
A]
>>>L
>>>[('a',
1),
('b',
2),
('c',
3),
('d',
4)]
以上给出了6中对List排序的方法,其中实例3456能起到对以List
item中的某一项
为比较关键字进行排序
效率比较:
复制代码代码如下:
cmp
<
DSU
<
key
通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当
多关键字比较排序:
实例7:
复制代码代码如下:
>>>L
=
[('d',2),('a',4),('b',3),('c',2)]
>>>
Lsort(key=lambda
x:x[1])
>>>
L
>>>[('d',
2),
('c',
2),
('b',
3),
('a',
4)]
我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字
排过序后再用第一个关键字进行排序呢有两种方法
实例8:
复制代码代码如下:
>>>
L
=
[('d',2),('a',4),('b',3),('c',2)]
>>>
Lsort(key=lambda
x:(x[1],x[0]))
>>>
L
>>>[('c',
2),
('d',
2),
('b',
3),
('a',
4)]
实例9:
复制代码代码如下:
>>>
L
=
[('d',2),('a',4),('b',3),('c',2)]
>>>
Lsort(key=operatoritemgetter(1,0))
>>>
L
>>>[('c',
2),
('d',
2),
('b',
3),
('a',
4)]
为什么实例8能够工作呢?原因在于tuple是的比较从左到右之一比较的,比较完第一个,如果
相等,比较第二个
以上就是关于python dataframe怎么排序全部的内容,包括:python dataframe怎么排序、python 排序,sort和sorted的区别是什么、利用python排序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)