01.pandas_hierarchical_indexing
1/ 创建多层索引(下面有四种,只用显式的product这种就行)
1.1 隐式索引:直接在index或者columns中添加list,如下的班级
注:Series也一样
index = [
['一班','一班','一班','二班','二班','二班'],
['张三','李四','王五','赵六','田七','孙八']
]
1.2 显示索引:用pd.MultiIndex,三种方式,使用第三种,其他两种知道就行
index = pd.MultiIndex.from_arrays( [
['一班','一班','一班','二班','二班','二班'],
['张三','李四','王五','赵六','田七','孙八']
])
index = pd.MultiIndex.from_tuples(
(
('一班','张三'),('一班','李四'),('一班','王五'),
('二班','赵六'),('二班','田七'),('二班','孙八')
)
)
index = pd.MultiIndex.from_product(
[
['一班','二班'],
['张三','李四','王五']
]
)
2/ 多层列索引的创建
3/ 多层索引对象的索引和切片操作
3.1 Series
(1)索引:
显式:
s['一班’,'张三’]
隐式:
s[3]
(2)切片:不要用显式
隐式:
s.iloc[0:5]
3.2 DataFrame
索引:
df.iloc[0,2]
df.loc[('一班','张三'), ('期中','英语')]
切片:
df.iloc[:, 1:5] # 使用隐式,不要使用显式
4. stack
只需记住一条指令: df.stack(level=0) #将第一层的列索引变成行索引
5.聚合函数
df.sum(axis=1, level=0) # sum/mean/max/min
axis=0: 行, sum(axis=0)表示各行相加, level表示第一层索引
02 pandas_combine
0. 回顾ndarray的级联
np.concatenate((n1, n2))
np.hstack((n1, n2))
np.vstack((n1, n2))
- pd.concat()
1.1 简单级联: pd.concat([df1, df2], axis=1, keys=[‘x’, ‘y’])
1.2 不匹配级联:
外连接:全部连接,空值用nan
pd.concat([df1, df2], sort=True,join=‘outer’)
内连接:只有共同部分
pd.concat([df1, df2], sort=True,join=‘inner’)
指定轴连接:(下面例子:用df1的列,让df2去合并)
pd.concat([df1, df2], sort=True, join_axes=[df1.columns])
1.3 用append()
df1.append(df2, sort=True) - pd.merge()
2.1 一对一合并
pd.merge(df1, df2)
2.2 多对一合并
df1.merge(df2)
2.3 多对多合并
df1.merge(df2)
2.4 key的规范化
两个df合并时,会出现类似两个df中都有name, age,而key只能有一个,要选择其中一个作为key
2.5 内合并和外合并
合并时取交集还是取并集的问题
2.6 列冲突的解决
当列冲突时,即有多个列名称相同时,需要使用on来指定哪一个列作为key,配合suffixes指定冲突列名