排序和排名
按索引排序
obj.sort_index() frame.sort_index()
DataFrame也可以指明具体的哪个轴frame.sort_index(axis=1)则为按照columns索引排序。
In[170]:obj.sort_index()
0ut[170]:
a 1
b 2
c 3
d 0
import numpy as np
from pandas import Series,DataFrame
In[171]:frame=DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])
#0-7 2行四列 还记得把~
In [172]:frame.sort_index() In[173]:frame.sort_index(axis=1)
d a b c a b c d
one 4 5 6 7 three 1 2 3 0
three 0 1 2 3 one 5 6 7 4
默认为升序,降序则添加参数ascending=False
按值排序
缺失值默认放末尾。
obj.sort_values()
(作者写的是obj.order()但是最新的pandas已经没有使用了)
frame.sort_values(by=['a','b'])
(同样作者写的是frame.sort_index(by=['a','b'])但是最新的pandas已经没有使用了,并且会提示你使用sort_values())
frame=DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})
a b
0 0 4
1 1 7
2 0 -3
3 1 2
frame.sort_values(by=['a','b'])
a b
2 0 -3
0 0 4
3 1 2
1 1 7
排名
顾名思义 排名嘛,按照值的出现顺序从1开始排名,有相同的时取平均数比如45相同则4.5,678相同则均为7这样的形式。
In [183]:obj=Series([7,-5,7,4,2,0,4,7])
In [184]:obj.rank()
0ut[184]:
0 7.0
1 1.0
2 7.0
3 4.5
4 3.0
5 2.0
6 4.5
7 7.0
dtype: float64
当然,你可能排名的时候只是想显示12345连续的,相同的时候按照他的出现顺序,则可以使用method='first'。可选min,max即分别为相同值的最小顺序或者最大顺序,'average'默认:在相等分组中,为各个值分配平均排名。
In [185]:obj.rank(method='first')
out[185]:
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
7 8.0
dtype: float64
降序只要添加参数ascending=False。
带有重复值的轴索引
什么意思呢,就是具有相同的索引,这个也是允许存在的,
obj=Series(range(5),index=['a','a','b','b','c'])
#查看索引是否唯一
obj.index.is_unique
out:False
#取值对应多个时,返回一个Series
obj['a']
out:a 0
a 1
dtype: int32
#DataFrame 取值也一样
df=DataFrame(np.random.randn(4,3),index=['a','a','b','b'])
df.ix['b']
0ut[197]:
0 1 2
b 1.669025 -0.438570 -0.539741
b 0.476985 3.248944 -1.021228
总结
pandas的基本功能通过这两节就看完了,主要介绍的是Series和Dataframe两种数据结构的重建索引reindex,通过drop来删除某些索引,obj['b','c']选取时bc索引是都包含的,DataFrame的行上标签索引通过ix来实现,不用时选择出来的是列!不同索引的pandas之间进行算术运算,以及对其函数级操作,这章节我们对其排序排名,以及带过的描述了下有重复索引的时候。总的来说,基本的简单使用在这两节都有描述,可以根据我上面描述的回顾一下。不清楚再翻回去看看~
网友评论