pandas层次化索引 ---- 索引的堆、聚合操作

pandas层次化索引

import numpy as np 
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

1. 索引的堆(stack)

  • stack()
  • unstack()
    【小技巧】:使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里;使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。
df1 = DataFrame(np.random.randint(0,150,size=(4,6)),
               index = list('东南西北'),
               columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])

这里写图片描述

df1.stack(level=-1)

这里写图片描述

df1.stack(level=0)

这里写图片描述
level代表的是层级,-1代表最内层,stack加ing列索引编程行的最内层索引

df2 = DataFrame(np.random.randint(0,150,size=(8,12)),
               columns = pd.MultiIndex.from_product([['模拟考','正式考'],
                                                   ['数学','语文','英语','物理','化学','生物']]),
               index = pd.MultiIndex.from_product([['期中','期末'],
                                                   ['雷军','李斌'],
                                                  ['测试一','测试二']]))

这里写图片描述

df2.unstack()  # unstack是将行索引变成列的最内层索引

这里写图片描述

df2.unstack(level=[0,1,2])  # 若果想把所有的行索引都转换成列索引
# 输出
模拟考  数学  期中  李斌  测试一     81
                 测试二     79
             雷军  测试一     66
                 测试二    122
         期末  李斌  测试一     12
                 测试二     88
             雷军  测试一     87
                 测试二     97
     语文  期中  李斌  测试一     81
                 测试二     49
             雷军  测试一     13
                 测试二    104
         期末  李斌  测试一     68
                 测试二     28
             雷军  测试一     58
                 测试二    104
     英语  期中  李斌  测试一    130
                 测试二     31
             雷军  测试一    125
                 测试二     89
         期末  李斌  测试一     99
                 测试二     51
             雷军  测试一      0
                 测试二    107
     物理  期中  李斌  测试一     43
                 测试二     66
             雷军  测试一    142
                 测试二     91
         期末  李斌  测试一     90
                 测试二     42
                       ... 
正式考  英语  期中  雷军  测试一     49
                 测试二    124
         期末  李斌  测试一     86
                 测试二     28
             雷军  测试一      5
                 测试二     52
     物理  期中  李斌  测试一     46
                 测试二    109
             雷军  测试一    132
                 测试二     65
         期末  李斌  测试一     12
                 测试二    128
             雷军  测试一     63
                 测试二     26
     化学  期中  李斌  测试一     28
                 测试二     13
             雷军  测试一     91
                 测试二     73
         期末  李斌  测试一     67
                 测试二      6
             雷军  测试一     36
                 测试二     57
     生物  期中  李斌  测试一    134
                 测试二    121
             雷军  测试一     44
                 测试二     58
         期末  李斌  测试一    106
                 测试二     29
             雷军  测试一     96
                 测试二     38
Length: 96, dtype: int32

2. 聚合操作

所谓的聚合操作就是平均数,方差,最大值,最小值……
注意:(1)需要指定axis;
(2)和unstack()相反,聚合的时候,axis等于哪一个,哪一个就保留。

df3 = DataFrame(np.random.randint(0,150,size=(4,6)),
               index = list('东南西北'),
               columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])

这里写图片描述

df3.sum(axis=1)
# 输出304558
西    614338
dtype: int64
df3.mean(axis=1)  # 平均值
# 输出50.66666793.000000
西    102.33333356.333333
dtype: float64
df3.std(axis=1)  # 方差代表数据的波动
# 输出32.92213036.845624
西    23.84673340.662841
dtype: float64
df3.max(axis=1)
# 输出84144
西    13589
dtype: int32
df3.min(axis=0)
# 输出
python  期中     5
        期末     2
math    期中    84
        期末     4
En      期中    49
        期末    20
dtype: int32

猜你喜欢

转载自blog.csdn.net/darkman_ex/article/details/80724121
今日推荐