pandas库学习(八) 函数应用和映射

2018-11-04  本文已影响0人  3ni

对DataFrame进行绝对值操作:
frame = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])

               b         d         e
Utah    1.246489 -0.596254  1.308865
Ohio   -0.714781 -0.056512 -1.089707
Texas   0.691823  0.633026  1.243367
Oregon  0.024873 -0.944009  0.586263

np.abs(frame)

               b         d         e
Utah    1.246489  0.596254  1.308865
Ohio    0.714781  0.056512  1.089707
Texas   0.691823  0.633026  1.243367
Oregon  0.024873  0.944009  0.586263

根据索引排序:
obj = Series(range(4),index=['d','a','b','c'])

d    0
a    1
b    2
c    3
dtype: int64

obj.sort_index()

a    1
b    2
c    3
d    0
dtype: int64

对于DataFrame来说,可以选择其中一个轴来进行来排序
如:frame.sort_index(axis=1,ascending=False)
此时是降序,默认是升序

上面提到了按索引对Series进行排序,接下来按值对Series进行排序
obj=Series([4,7,-3,2])

0    4
1    7
2   -3
3    2
dtype: int64

obj.sort_values()

2   -3
3    2
0    4
1    7
dtype: int64

如果有缺失值,会被放到最后面

对DataFrame进行排序。(注:sort_index()方法已经被弃用)
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

按照某列进行排序,比如b列
frame.sort_values(by='b')

   a  b
2  0 -3
3  1  2
0  0  4
1  1  7

a和b列都要进行排序
frame.sort_values(by=['a','b'])

   a  b
2  0 -3
0  0  4
3  1  2
1  1  7

Series排名操作(ranking)
Series.rank(method='average',ascending=True)
method可选参数有:average, min, max, first
这个排名和排序有点不一样,看看结果就知道有多么的诡异
obj = Series([7,-5,7,4,2,0,4])

0    7
1   -5
2    7
3    4
4    2
5    0
6    4
dtype: int64

obj.rank()此时method默认为average

0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

这上面是个什么情况,感觉没有被排名啊,看图:


图01

明白上面之后,再看method参数的解释:
average 默认:在相等分组中,为各个值分配平均排名
first 按值在原始数据中的出现顺序分配排名
min 使用整个分组的最小排名
max 使用整个分组的最大排名

obj.rank(method='first')

0    6.0
1    1.0
2    7.0
3    4.0
4    3.0
5    2.0
6    5.0
dtype: float64

又是一脸懵逼,再来看图:


图02

为什么1号是6.0而不是7.0,毕竟它们的值都是相同的,因为这里method为'first',这里的意思就是1号的7在2号7的前面(从原始数据看),所以1号的排名就要在2号的前面,同理3号和4号是一样的道理

method为max和min也是同样的理解

对于DataFrame排名也是一样比如:
frame = DataFrame({'b':[4.3,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-2.5]})

   a    b    c
0  0  4.3 -2.0
1  1  7.0  5.0
2  0 -3.0  8.0
3  1  2.0 -2.5

frame.rank(axis=1)

     a    b    c
0  2.0  3.0  1.0
1  1.0  3.0  2.0
2  2.0  1.0  3.0
3  2.0  3.0  1.0

可以检查是否有重复索引
obj = Series(range(5),index=['a','a','b','b','c'])

a    0
a    1
b    2
b    3
c    4
dtype: int64

obj.index.is_unique结果为False

上一篇下一篇

猜你喜欢

热点阅读