Pandas层级索引/分组和聚合/透视表

1、pandas层级索引

 

    pandas的层级索引对象就是MulitIndex。设置多个索引列需要使用set_index()方法,当要多层级索引进行排序时需要使用sort_index()方法。

【set_index()】

def set_index(self, keys, drop=True, append=False, inplace=False,
                  verify_integrity=False):

对源码中set_index()参数说明 

(1)drop参数:删除要作用的索引列

(2)append参数:向现有追加索引列

设置多个索引列使用set_index( ['外层索引','内层索引'],inplace=True方法;参数inplace为True表示直接修改DataFrame对象无法返回值。

【选取子集】

(1)取外层索引就是:loc['outer_index'],就是set_index()方法写在前面的索引;

(2)取内层索引:loc['outer_index','inner_index'];取内层索引必须先写外层索引。

【sort_index()方法】

def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
                   kind='quicksort', na_position='last', sort_remaining=True,
                   by=None)

 通过上面的源码我们发现sort_index()方法的level参数默认值为None,但是需要我们注意的level值跟我们设置set_index()方法设置的多个索引列的个数一致性,就是设置几个索引列level参数就可以为几,只不过level是从0开始的。

import pandas as pd
# 文件路径
filename = "./happiness.csv"
# usecols=[] 参数表示读取指定列数据
data = pd.read_csv(filename,usecols=['Country', 'Region', 'Happiness Rank', 'Happiness Score'])

# 设置多个索引列,一般设置多个索引列时,这个列表中大分类在前面小分类在后面,否则设置无意义。
data.set_index(['Region', 'Country'],inplace=True) # inplace=True表示直接修改dataframe数据

# 外层选择,也就是set_index()设置多个索引列的中最前面的一个索引
# print(data.loc['Western Europe']) # 结果是dataframe对象
print("="*90)
# 内层选取
# print(data.loc['Australia and New Zealand', 'New Zealand']) # 结果是Series对象
# swaplevel()方法交换层级,就是交换内外层进行交换。
print(data.swaplevel())

# 层级索引排序;我们在set_index()中设置几个索引列,这里的level就可以设置值就是对应的个数,只是level从0开始,0表示最外层索引列
print(data.sort_index(level=0).head(10)) # level默认值为None

2、分组和聚合

     分组:对数据集体进行分组,然后对每组进行统计分析。pandas利用groupby()方法进行更加复杂的分组运算。分组的运算过程一般是split--->apply--->combine
(1)拆分:进行分组的根据;
(2)应用:每个分组运算的计算规则;
(3)合并:把每个分组的计算结果合并。

    聚合:数组产生标量的过程,如mean()/count()等。常用于分组后的数据进行计算;内置的聚合函数有sum()/max()/min()等。

 2.1、分组操作

【按单列分组】使用DataFrame对象的groupby(''label")

【按多列分组】使用DataFrame对象的groupby( ["label1", "label2"] )--->多层dataframe

    我们需要注意的是在使用groupby()方法操作后产生的是一个GroupBy对象;DataFrameGroupBy或者SeriesGroupBy。GroupBy对象没有进行实际的运算,只是包含分组的中间数据。

【对GroupBy对象进行分组聚合操作】

(1)常用的聚合操作:mean()/sum()/size()/min()/count()。

(2)非数值数据不进行分组运算。

 

2.2、聚合操作

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章