YOLO813

DataFrame初了解(2):数据排序+重建索引+数据汇总

    新建测试数据

data4 = pd.DataFrame(np.random.randn(5,4), index =[3,1,2,4,5] ,columns=list('adcb'))
data4

    sort_index()默认在0轴上进行排序,返回一个新的、排序好的对象

data4.sort_index(ascending=True)

    让列排序

data4.sort_index(axis="columns")


    如果想要根据某列Series的值进行排序,使用sort_values函数,对多列进行排序时,可以传入一个列表给关键字参数by

data4.sort_values(by='b',ascending=False)


    获取排名rank,排名指对数组从1到有效数据点总数分配名次的操作,默认情况下,rank通过将平均排名分配到每个组来打破平级关系,先看下Series的示例:

obj = pd.Series([6,-1,6,5,4,0,4])
obj.rank()

列表里面7个值,按照从小到大序列,6为最后一名,因为存在两个6,所以显示为6.5,可以对它们在数据中的观察顺序来分配排名:

obj.rank(method='first')

    在DF中,也是一样的用法,默认在0轴上进行排名:

data4.rank()

我们可以使用axis参数来改变列的排名

data4.rank(axis=1)


重建索引reindex

    reindex默认在0轴上创建一个符合新索引的新对象,如果某个索引值之前不存在,则会引入缺失值。

data4.reindex([5,4,3,2,1,6])

data4.reindex(['a','b','c','d'],axis=1)


数据的观察与汇总

    建立测试数据如下:

data5 = pd.DataFrame(np.random.randn(9,5), columns=list('abcde'))
data5

data5.head(2)
data5.tail(2)


    使用describe函数可以很方便的看到数据的大致情况

data5.describe()


    相加等运算,默认还是在行方向

data5.sum()


    idxmax返回该行最大值的索引

data5.idxmax()

#获取a列里面的最大值
data5.a[data5.a.idxmax()]


    如果获取DF中的唯一值

data6 = pd.DataFrame(np.random.randint(1,5,size=(6,5)), columns=list('abcde'))
data6

    可以使用unique函数或者value_counts函数,但是这些函数需要应用在类似Series这种一维数组中,例如

data6.a.unique()
>array([4, 3, 1], dtype=int64)
data6.loc[1].unique()
>array([3, 4, 2], dtype=int64)
data6.a.value_counts()
data6.loc[1].value_counts()


    如果想要统计下一行数据相较于上一行数据变化的百分比,pandas也有很便利的函数pct_change,首先我们来看一道简单的算术题,假设一棵树上第一年有1颗果子,第二年长了5颗,那么第二年相较第一年的变化百分比应为(5-1)/1=400%,理解了这个计算方式,我们再来看如下代码就很清晰了

data6.pct_change()


    相关系数corr,corr函数计算的是两个Series中重叠的、非NA的、按索引对齐的值的相关性

data6.corr()

    协方差矩阵cov()

data6.cov()

    corrwith函数计算出DF中的行或列与另外一个序列或者DF的相关性

data6.corrwith(data6.a)