数据分析(四)

多层次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是保留哪个层

image.png

你可能感兴趣的:(数据分析(四))