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、聚合操作