一、多级索引
1、Series多级索引示例:
data = pd.Series(np.random.randn(9),index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 3, 1, 2, 2, 3]])
a  1   -0.204708
   2    0.478943
   3   -0.519439
b  1   -0.555730
   3    1.965781
c  1    1.393406
   2    0.092908
d  2    0.281746
   3    0.769023
2、将两级索引转换为一级索引形式的DataFrame
data.unstack()

3、将一个二维表格转换为高级索引Series
obj.stack()
4、DataFrame多级索引示例frame = pd.DataFrame(np.arange(12).reshape((4, 3)),index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],columns=[['Ohio', 'Ohio', 'Colorado'],['Green', 'Red', 'Green']])
5、给索引添加名称
frame.index.names = ['key1', 'key2']  #一级行索引名称为key1,二级行索引名称为key2
frame.columns.names=['state', 'color']  #一级列索引名称为state,二级列索引名称为color
6、索引互换位置
frame.swaplevel(i=-2, j=-1, axis=0)
#适用于两级索引的位置互换,i和j可以传入int,或者String(索引名称),axis=0:代表行索引互换,axis=1代表列索引位置互换
7、索引排序
frame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
axis:对行索引还是列索引进行排序
level:对第几级别索引进行排序
ascending:升序还是降序
inplace:view还是inplace
8、将列索引设置为行索引
frame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
keys:列标签或列标签列表
drop:删除已经作为行标签的keys对应的列
append:是否将keys添加到现有的index后面
9、将多级行索引变为列索引
frame.reset_index()
二、数据表合并
1.merge
 
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)
 
 left:左边表格
right:右边表格
how:inner:取交集,outer:并集;left:参照左边表格行,right:参照右边表格行
on:当left和right有相同的列名时,默认按照相同的列名进行合并,可以指定一个列表,当表格中有两个以上相同的列名时。
left_on和right_on:分别指定左边表格参照列和右边表格参照列,适用于参照列名称不一致的情况。可以为列表,对应的对方表格中也必须是列表或多级索引。
suffixes:是否添加后缀,如果left和right有相同的列名时添加后缀
left_index和right_index:当使用列名匹配索引时使用。是left_on和right_on的特殊情况。
2.join
left.join(right, on=None, how='left', lsuffix='', rsuffix='', sort=False)
join是merge的一种特殊形式.所有功能可以用merge来实现。
#默认left和right 以相同的索引连接
#on:可以指定相同的列名或列名组成的元祖或列表
#how:同merge
#lsuffix和rsuffix代表相同列名添加的后缀
3.concatnate连接
.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
功能:沿着设定的轴线连接两个表格
objs:需要连接的对象序列,用列表标示
axis:沿着index或者columns
join:outer,inner
 join_axes:指定连接的索引列表,形式为[[  ]],用于代替join的inner或者outer
keys:通常为一个列表,构造一个高级索引,keys作为指定obj的高级索引,通常和objs个数一致。
names:指定高级索引对应的名称
ignore_index:是否忽略索引,默认为Fasle,合并过程中各自保留原来的索引值,True:使用新的索引从0到n-1
4、重叠数据的合并
where(condition, [x, y]):例:np.where(pd.isnull(a),a,b)
    condition:arraylike,bool;
    x,y:arraylike,与condition长度一致,如果为真返回x,否则y,
obj1.combine_first(obj2):如果obj1对应位置有数据(不为nan)使用obj1的数据,否则使用obj2的数据