像使用excel一样使用pandas

多级索引
* 主要是对索引进行操作
1. 设置多级索引 - df.set_index(['l1', 'l2'])
2. 使用多级索引 - df.loc['l1'] / df.loc['l1', 'l2'],按照行获取数据
3. 交换索引层级 - df.swaplevel()
4. 按索引排序 - df.sort_index()
分组(GroupBy对象)和聚合操作
* 有了索引之后,借助索引对值进行操作。定制分组操作 和 定制聚合操作
1. df.groupby('col1') / df.groupby(['col1' ,'col2'])
2. groupbyObj.size => 返回一个series / groupbyObj.count =>返回一个dataFrame,只数非空元素数量
3. groupby 一定是作用在index上。index的各列,按照元素类型,按照默认行为进行分组。比如int/str类型,就把值相同的元素分成一组。对于定制分组函数,接收的参数,是index的元素。意味着,如果是multiindex,则接收到的是一个tuple。
4. agg函数,作用在values的某一列或者几列上。
某一列如数,如df['col1'] 可以通过agg({np.max, np.min, np.mean})这样的形式,分拆成多列。
也可以同时对不同的列,使用不同的聚合函数。如:df['col1', 'col2'].agg({'col1':np.max, 'col2':np.min})
当然,也可以在某一分组内部,针对某一类的数据做运算,得出新的列
agg还有个有趣的属性 - agg如果接受一个定制的聚合函数,它处理分组的顺序,和applymap处理元素的顺序一样。
有两个有趣的函数,
qcut - 等频分组
nunique - 去重并计算数量
透视表和数据归并
透视表实在没啥好写的,就是一个API和3+2个参数 - df.pivot_table(values=, index=, columns=,(aggfunc=,)?(margins=)?)。margin可以类比边缘概率,比较容易记忆
数据归并,如concat,merge。这两个操作都是针对数据帧,可以和’+‘ 在一起记忆。’+‘可以处理 dataframe与series混合的情况。
数据重构
值得一提的是 stack/unstack操作。