美文网首页
pandas库学习(八) 函数应用和映射

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

作者: 3ni | 来源:发表于2018-11-04 16:54 被阅读0次

    对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

    相关文章

      网友评论

          本文标题:pandas库学习(八) 函数应用和映射

          本文链接:https://www.haomeiwen.com/subject/vporxqtx.html