多层次pandas
多层次pandas创建pd.MultiIndex
- 使用数组
columns = pd.MultiIndex.from_arrays([['期中', '期中','期中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']]) data = np.random.randint(0,150,size=(10,6)) # index = [['一班', 1],['一班', 1],['一班', 1],['一班', 1],['一班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1]] index = pd.MultiIndex.from_arrays([['一班','一班','一班','一班','一班','二班','二班','二班','二班','二班'], np.arange(10)]) df = DataFrame(data=data,columns=columns, index=index)
- 使用元组
columns = [['期中', '期中','期中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']] data = np.random.randint(0,150,size=(10,6)) # index = [['一班', 1],['一班', 1],['一班', 1],['一班', 1],['一班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1]] # index = pd.MultiIndex.from_arrays([['一班','一班','一班','一班','一班','二班','二班','二班','二班','二班'], np.arange(10)]) index = pd.MultiIndex.from_tuples([('一班', 1),('一班', 2),('一班', 3),('一班', 4),('一班', 5),('二班', 6),('二班', 7),('二班', 8),('二班', 9),('二班', 10)]) df = DataFrame(data=data,columns=columns, index=index)
- 使用product(推荐)
columns = pd.MultiIndex.from_product([['期中','期末'],['语文','数学','英语']]) data = np.random.randint(0,150,size=(10,6)) # index = [['一班', 1],['一班', 1],['一班', 1],['一班', 1],['一班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1],['二班', 1]] # index = pd.MultiIndex.from_arrays([['一班','一班','一班','一班','一班','二班','二班','二班','二班','二班'], np.arange(10)]) index = pd.MultiIndex.from_product([['一班','二班'],np.arange(5)]) df = DataFrame(data=data,columns=columns, index=index)

多层次pandas索引与切片
- Series的操作
【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,推荐使用.loc中括号索引和切片。
#索引
Series['index']
Series.loc['index']
Series.iloc[index下标]
Series[index下标]
#切片
Series[index下标1:index下标2]
- DataFrame的操作
#对第一层columns索引
d[第一层columns]
#对第二层columns索引
d[第一层columns][第二层columns]
#只对第一层index索引
d.loc[第一层index]
d.iloc[第一层index下标]
#对第二层index索引
d.loc[第一层index][第二层index]
- 索引的stack
- stack()
- unstack()
stack()可将一行的columns挪到index,unstack()可将一列的index挪到columns(变到最里层),参数level为控制挪哪一层,比如0就是第一层即为最外层,以此类推
- DataFrame聚合操作
DataFrame.sum(axis,level)
axis控制是对行还是对列,而level是保留哪个层


网友评论