您当前的位置: 首页 >  数据分析

ython数据分析入门:Pandas层级索引及其统计计算和描述

发布时间:2022-04-15 20:51:52 ,浏览量:7

下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引。

示例代码:

import pandas as pd
import numpy as np
 
ser_obj = pd.Series(np.random.randn(12),index=[ ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] ]) print(ser_obj) 

运行结果:

a 0 0.099174 1 -0.310414 2 -0.558047 b 0 1.742445 1 1.152924 2 -0.725332 c 0 -0.150638 1 0.251660 2 0.063387 d 0 1.080605 1 0.567547 2 -0.154148 dtype: float64
MultiIndex索引对象

打印这个Series的索引类型,显示是MultiIndex

直接将索引打印出来,可以看到有lavels,和labels两个信息。levels表示两个层级中分别有那些标签,labels是每个位置分别是什么标签。

示例代码:

print(type(ser_obj.index)) print(ser_obj.index) 

运行结果:

<class 'pandas.indexes.multi.MultiIndex'> MultiIndex(levels=[['a', 'b', 'c', 'd'], [0, 1, 2]], labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) 
选取子集

根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。

当要通过内层索引获取数据的时候,在list中传入两个元素,前者是表示要选取的外层索引,后者表示要选取的内层索引。

1. 外层选取:
ser_obj['outer_label'] 

示例代码:

# 外层选取 print(ser_obj['c']) 

运行结果:

0 -1.362096 1 1.558091 2 -0.452313 dtype: float64
2. 内层选取:
ser_obj[:, 'inner_label'] 

示例代码:

# 内层选取 print(ser_obj[:, 2]) 

运行结果:

a 0.826662 b 0.015426 c -0.452313 d -0.051063 dtype: float64

常用于分组操作、透视表的生成等

交换分层顺序 swaplevel()

.swaplevel( )交换内层与外层索引。

示例代码:

print(ser_obj.swaplevel()) 

运行结果:

0 a 0.099174 1 a -0.310414 2 a -0.558047 0 b 1.742445 1 b 1.152924 2 b -0.725332 0 c -0.150638 1 c 0.251660 2 c 0.063387 0 d 1.080605 1 d 0.567547 2 d -0.154148 dtype: float64
交换并排序分层 sortlevel()

.sortlevel( )先对外层索引进行排序,再对内层索引进行排序,默认是升序。

示例代码:

# 交换并排序分层 print(ser_obj.swaplevel().sortlevel()) 

运行结果:

0 a 0.099174 b 1.742445 c -0.150638 d 1.080605 1 a -0.310414 b 1.152924 c 0.251660 d 0.567547 2 a -0.558047 b -0.725332 c 0.063387 d -0.154148 dtype: float64

示例代码:

arr1 = np.random.rand(4,3) pd1 = pd.DataFrame(arr1,columns=list('ABC'),index=list('abcd')) f = lambda x: '%.2f'% x
pd2 = pd1.applymap(f).astype(float) pd2

运行结果:

A            B           C
a 0.87 0.26 0.67 b 0.69 0.89 0.17 c 0.94 0.33 0.04 d 0.35 0.46 0.29 
常用的统计计算

sum, mean, max, min… axis=0 按列统计,axis=1按行统计

skipna 排除缺失值, 默认为True

示例代码:

pd2.sum() #默认把这一列的Series计算,所有行求和
pd2.sum(axis='columns') #指定求每一行的所有列的和
pd2.idxmax()#查看每一列所有行的最大值所在的标签索引,同样我们也可以通过axis='columns'求每一行所有列的最大值的标签索引

运行结果:

A 2.85 B 1.94 C 1.17 dtype: float64
 
 
a 1.80 b 1.75 c 1.31 d 1.10 dtype: float64
 
 
A    c
B    b
C    a
dtype: object

在这里插入图片描述

常用的统计描述

describe 产生多个统计数据

示例代码:

pd2.describe()#查看汇总

运行结果:

A        B        C
count 4.000000 4.00000 4.000000 mean 0.712500 0.48500 0.292500 std 0.263613 0.28243 0.271585 min 0.350000 0.26000 0.040000 25% 0.605000 0.31250 0.137500 50% 0.780000 0.39500 0.230000 75% 0.887500 0.56750 0.385000 max 0.940000 0.89000 0.670000 #百分比:除以原来的量
pd2.pct_change() #查看行的百分比变化,同样指定axis='columns'列与列的百分比变化
     A                 B                C
a    NaN              NaN             NaN
b -0.206897 2.423077 -0.746269 c 0.362319 -0.629213 -0.764706 d -0.627660 0.393939 6.250000 
常用的统计描述方法

在这里插入图片描述

关注
打赏
1688896170
查看更多评论

暂无认证

  • 7浏览

    0关注

    105695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0521s