《利用python进行数据分析》之 排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mr_muli/article/details/84036945
  • 《利用python进行数据分析》之 排序
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 13 20:26:57 2018

@author: muli
"""

from pandas import Series,DataFrame
import pandas as pd
import numpy as np


#排序和排名
#根据条件对数据集排序也是一种重要的内置运算。
#要对行或列索引进行排序(按字典顺序),可以使用sort_index方法,
#它将返回一个已经排序的新对象:

obj=Series(range(4),index=['d','a','b','c'])
print(obj)
print("------")
# 原对象不发生改变
obj2=obj.sort_index()
print(obj2)
print("------")
print(obj)

print("------------------------")
#对于DataFrame,则可以根据任意一个轴上的索引进行排序:
frame=DataFrame(np.arange(8).reshape((2,4)),
                index=['three','one'],
                columns=['d','a','b','c'])
print(frame)
print("---------------")
print(frame.sort_index(axis=0))
print("--------")
print(frame.sort_index(axis=1))

print("----------------------")
#数据默认是按升序排列的,但也可以降序排序
# 指代的是 列名的降序
print(frame.sort_index(axis=1,ascending=False))

print("-----------------------------")
#若要按值对Series进行排序,可以使用order方法:
obj=Series([4,7,-3,2])
print(obj)
print("-----")
# Python3.6之后的版本已经没有order属性了,尝试使用sort_values()方法就好了
# print(obj.order()) ----报错
# 对Series的值进行排序,默认为 升序
# ascending=False, 降序
print(obj.sort_values(ascending=False))

# 在排序的时候,缺失值默认都会被放在了Series的末尾:
obj=Series([4,np.nan,7,np.nan,-3,2])
print(obj.sort_values())
print("---")
# 不论是升序还是降序,NaN 总是放在 Series 的末尾
print(obj.sort_values(ascending=False))

# 在DataFrame上,你可能希望根据一个或多个列中的值进行排序。
# 将一个或多个列的名字传递给by选项即可达到该目的:
print("******************************")
frame=DataFrame({'b':[4,7,-3,2],'a':[4,1,2,3]})
print(frame)
print("-----")
# 默认 "by"按照所选字段的升序 排序,矩阵的其他列也同时跟着变化
print(frame.sort_index(by='b'))
print("-------")
#要根据多个列进行排序,传入名称的列表即可:
print(frame.sort_index(by=['a','b']))
print("---------------------------===")
# 排名(ranking)跟排序关系密切,且会增设一个排名值(从1开始,一直到数组中有效数据的数量),
# 跟numpy.argsort产生的间接排序索引差不多,只不过它可以根据某种规则破坏平级关系。

# 默认下:rank是通过“为各组分配一个平均排名”的方式来破坏平级关系。
obj=Series([7,-5,7,4,2,0,4])
print(obj.rank())
print("*****")
# 也可以根据值在原数据中出现的顺序给出排名:
print(obj.rank(method='first'))
print("*****")
# 也可以按降序进行排名:
# 相同取值 取 同组中 最大值
print(obj.rank(ascending=False,method='max'))
print("%%%%%%")
# 相同取值 取 同组中 最小值
print(obj.rank(ascending=False,method='min'))

#表5-8 :排名时用于破坏平级关系的method选项
#method 说明
#‘average’ 默认:在相等分组中,为各个值分配平均排‘’
#‘min’ 使用整个分组的最小排名
#‘max’ 使用整个分组的最大排名
#‘first’ 按值在原始数据中的出现顺序分配排名


#DataFrame可以在行或列上计算排名
frame=DataFrame({'b':[4.3,7,-3,2],
                 'a':[0,1,0,1],
                 'c':[-2,5,8,-2.5]})

print(frame)
print("******")
# 在 y 轴上排序,从小到大--相同值,取排序的平均值
print(frame.rank(axis=0))
print("******")
# 在 x 轴上排序,从小到大----升序
print(frame.rank(axis=1))

猜你喜欢

转载自blog.csdn.net/mr_muli/article/details/84036945
今日推荐